Session的理解与深入

来源:互联网 发布:金和网络做什么的 编辑:程序博客网 时间:2024/06/06 05:42
session测试: 客户端(jsp)访问服务端生成sessionid结果的测试
火狐浏览器打开第一个页面访问服务器 798873A1A595F4D6BF29D4E71BCECBB0
火狐浏览器打开第二个页面访问服务器 798873A1A595F4D6BF29D4E71BCECBB0
qq浏览器打开第一个页面访问服务器 9329B22DF63BA6339713410D19210299
qq浏览器打开第二个页面访问服务器 9329B22DF63BA6339713410D19210299
通过ServletActionContext.getRequest().getSession().invalidate(); 通过invalidate可以清除session或者是session超时(关掉浏览器并不会关闭session),下次访问就会生成一个与上一次不同的sessionid。
session
总结:同一个浏览器打开多个界面访问同一个服务器地址还是同一个session
不同浏览器访问同一个服务器地址,不同浏览器之间的不是同一个session

当JSP页面没有显式(<% @page session="false"%>)禁止session的时候,在打开浏览器第一次请求该jsp的时候,服务器会自动为其创建一个session,并赋予其一个sessionid(tomcat机制生成的sessionid叫做JSESSIONID)
,发送给客户端的浏览器,存在于cookie里面。以后客户端接着请求本应用中其他资源的时候,会自动在请求头上添加:Cookie:JSESSIONID=客户端第一次拿到的session ID,服务器端在接到请求时候,就会收到session ID,并根据ID在内存中找到之前创建的session对象,提供给请求使用.
jsp界面访问sessionid值
这里是jsp取到的生成sessionid值
(tomcat的session的id值生成的机制是:一个随机数+时间+jvm的id值,jvm的id值会根据服务器的硬件信息计算得来,因此不同jvm的id值都是唯一的)
另外session存放在服务器端的内存中,不过session可以通过特殊的方式做持久化管理(memcache,redis)。
session超时:Tomcat一般默认时间为30分钟
可以设置session失效:
第一种:在web.xml配置 分钟为单位,最小设置为1分钟
    <session-config>
        <session-timeout>30</session-timeout>
    </session-config>
第二种:java代码
session.setMaxInactiveInterval(30*60); 以秒为单位
第三种:在server.xml配置
而且tomcat 5.0中的默认配置里面有这个默认标签(过了5.0找不到默认配置),过了5.0就要自己设置
    <session-config>
        <session-timeout>30</session-timeout>
    </session-config>
如果都设置了,有个优先级的问题,从高到低:java代码>在web.xml配置>在server.xml配置,感觉优先级别跟着由近到远的范围走的一样,哈哈。
2 1