Session机制

来源:互联网 发布:数据库什么叫日志文件 编辑:程序博客网 时间:2024/05/06 03:42
一、Session机制简介

session机制采用的是服务器端保持HTTP状态信息的方案
服务器使用一种类似于散列表的结构(也可能就是使用散列表)来保存信息。
当程序需要为某个客户端的请求创建一个session时,服务器首先检查这个客户端的请求里是否包含了一个session标识(sessionId),如果已经包含一个sessionId则说明以前已经为此客户创建过session,服务器就按照sessionid把这个session检索出来使用(如果检索不到,可能会新建一个,这种情况可能出现在服务端已经删除了该用户对应的session对象,但用户人为地在请求的URL后面附加上一个JSESSION的参数)。如果客户请求不包含sessionId,则为此客户创建一个session并且生成一个与此session相关联的sessionId这个sessionid将在本次响应中返回给客户端保存

二、保存sessionid的几种方式
保存sessionid的方式可以采用cookie,这样在交互过程中浏览器可以自动的按照规则把这个标识发送给服务器。
由于cookie可以被人为的禁用,必须有其它的机制以便在cookie被禁用时仍然能够把sessionid传递回服务器,经常采用的一种技术叫做URL重写就是把sessionid附加在URL路径的后面,附加的方式也有两种,一种是作为URL路径的附加信息,另一种是作为查询字符串附加在URL后面。网络在整个交互过程中始终保持状态,就必须在每个客户端可能请求的路径后面都包含这个sessionid

三、Session cookie

session通过SessionID来区分不同的客户,session是以cookieURL重写为基础的,默认使用cookie来实现系统会创造一个名为JSESSIONID的输出cookie,这称之为sessioncookie,以区别persistentcookies(也就是我们通常所说的cookie),sessioncookie是存储于浏览器内存中的,并不是写到硬盘上的,通常看不到JSESSIONID,但是当把浏览器的cookie禁止后,web服务器会采用URL重写的方式传递Sessionid,这时地址栏看到
session cookie针对某一次会话而言,会话结束sessioncookie也就随着消失了,而persistentcookie只是存在于客户端硬盘上的一段文本。
关闭浏览器,只会是浏览器端内存里的sessioncookie消失,但不会使保存在服务器端的session对象消失,同样也不会使已经保存到硬盘上的持久化cookie消失。

四、Session的创建与删除

一个常见的错误是以为session在有客户端访问时就被创建,然而事实是直到某server端程序(Servlet)调用HttpServletRequest.getSession(true)或者HttpServletRequest.getSession()这样的语句时才会被创建。
Sessinon在用户访问第一次访问服务器时创建,需要注意只有访问JSP、Servlet等程序时才会创建Session,只访问HTML、IMAGE等静态资源并不会创建Session,可调用request.getSession(true)强制生成Session。
session在下列情况下被删除:
A.程序调用HttpSession.invalidate()
B.距离上一次收到客户端发送的sessionid时间间隔超过了session的最大有效时间
C.服务器进程被停止
注意:关闭浏览器只会使存储在客户端浏览器内存中的sessioncookie失效,不会使服务器端的session对象失效。

五、Session什么时候失效?(设置Session失效时间)

  1. 服务器会把长时间没有活动的Session从服务器内存中清除,此时Session便失效。Tomcat中Session的默认失效时间为30分钟。

       会话的超时间隔可以在web.xml文件中设置,其默认值由Servlet容器定义。

        <session-config>

           <session-timeout>30</session-timeout>

        </session-config>


  2. 调用Session的invalidate方法。

  3.在程序中调用session的setMaxInactiveInterval方法设置

    代码如下:session.setMaxInactiveInterval(30 * 60);  

     setMaxInactiveInterval设置的是当前会话的失效时间,不是整个web的时间,单位为以秒计算。如果设置的值为零或负数,则表示会话将永远不会超时。常用于设置当前会话时间。


六、利用URL重写实现Session跟踪


•  Servlet规范中引入了一种补充的会话管理机制,它允许不支持Cookie的浏览器也可以与WEB服务器保持连续的会话。这种补充机制要求在响应消息的实体内容中必须包含下一次请求的超链接,并将会话标识号作为超链接的URL地址的一个特殊参数。
•  将会话标识号以参数形式附加在超链接的URL地址后面的技术称为URL重写。如果在浏览器不支持Cookie或者关闭了Cookie功能的情况下,WEB服务器还要能够与浏览器实现有状态的会话,就必须对所有可能被客户端访问的请求路径(包括超链接、form表单的action属性设置和重定向的URL)进行URL重写。
HttpServletResponse接口中定义了两个用于完成URL重写方法:
   encodeURL方法
   encodeRedirectURL方法

0 0
原创粉丝点击