session的生命周期是怎样的

session的生命周期是怎样的

1、总结

一句话总结:Tomcat中Session的默认失效时间为20分钟。若是咱们敲代码的时候把它设置成1个月,那么这一个月的数据会代替默认20分钟的数据,使session的失效时间为一个月。

 

一、手机浏览器的session为何会失效的很快?

绝大多数的手机浏览器都不支持Cookie,而session判断用户是要依赖cookie的。浏览器

这是由于Session须要使用Cookie做为识别标志。HTTP协议是无状态的,Session不能依据HTTP链接来判断是否为同一客户,所以服务器向客户端浏览器发送一个名为JSESSIONID的Cookie,它的值为该Session的id(也就是HttpSession.getId()的返回值)。Session依据该Cookie来识别是否为同一用户。服务器

 

二、session依赖cookie判断用户的过程是怎样的?

这是由于Session须要使用Cookie做为识别标志。HTTP协议是无状态的,Session不能依据HTTP链接来判断是否为同一客户,所以服务器向客户端浏览器发送一个名为JSESSIONID的Cookie,它的值为该Session的id(也就是HttpSession.getId()的返回值)。Session依据该Cookie来识别是否为同一用户。cookie

 

三、同一浏览器新开的浏览器窗口和已有窗口再开的子窗口的session公用状况是怎样的?

新开的浏览器窗口会生成新的Session,但子窗口除外。子窗口会共用父窗口的Session。例如,在连接上右击,在弹出的快捷菜单中选择"在新窗口中打开"时,子窗口即可以访问父窗口的Session。session

 

四、Session的声明周期是多久?

Tomcat中Session的默认失效时间为20分钟。若是咱们敲代码的时候把它设置成1个月,那么这一个月的数据会代替默认20分钟的数据,使session的失效时间为一个月。url

 

五、不一样用户的同名session会互相干扰么?

不会,每个session都会有一个sessionid并且是惟一的,不可能存在干扰的。seeion是对话变量,每一个用户对话有本身特有的sesion。spa

 

六、session的使用流程是怎样的?

客户端访问服务器的时候回带上cookie,若是cookie里面存了sessionid,那么服务器一会儿就能判断用户了。code

客户端第一次带的cookie是没有sessionid的,登陆以后,那么cookie中就有sessionid了,而后在cookie和session的有效期里面,服务器端就能判断用户。服务器端是根据sessionid来判断用户的,每个用户的sessionid都不一样。blog

 

七、如何解决大部分手机浏览器不支持cookie的问题?

例如,绝大多数的手机浏览器都不支持Cookie。Java Web提供了另外一种解决方案:URL地址重写。生命周期

  URL地址重写是对客户端不支持Cookie的解决方案。URL地址重写的原理是将该用户Session的id信息重写到URL地址中。服务器可以解析重写后的URL获取Session的id。这样即便客户端不支持Cookie,也可使用Session来记录用户状态。HttpServletResponse类提供了encodeURL(String url)实现URL地址重写,该方法会自动判断客户端是否支持Cookie。若是客户端支持Cookie,会将URL原封不动地输出来。若是客户端不支持Cookie,则会将用户Session的id重写到URL中。内存

 

 

 

2、session的生命周期

Session存储在服务器端,通常为了防止在服务器的内存中(为了高速存取),Sessinon在用户访问第一次访问服务器时建立,须要注意只有访问JSP、Servlet等程序时才会建立Session,只访问HTML、IMAGE等静态资源并不会建立Session,可调用request.getSession(true)强制生成Session。

Session何时失效?

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

  2. 调用Session的invalidate方法。

Session对浏览器的要求:

  虽然Session保存在服务器,对客户端是透明的,它的正常运行仍然须要客户端浏览器的支持。这是由于Session须要使用Cookie做为识别标志。HTTP协议是无状态的,Session不能依据HTTP链接来判断是否为同一客户,所以服务器向客户端浏览器发送一个名为JSESSIONID的Cookie,它的值为该Session的id(也就是HttpSession.getId()的返回值)Session依据该Cookie来识别是否为同一用户。

  该Cookie为服务器自动生成的,它的maxAge属性通常为-1,表示仅当前浏览器内有效,而且各浏览器窗口间不共享,关闭浏览器就会失效。所以同一机器的两个浏览器窗口访问服务器时,会生成两个不一样的Session。可是由浏览器窗口内的连接、脚本等打开的新窗口(也就是说不是双击桌面浏览器图标等打开的窗口)除外。这类子窗口会共享父窗口的Cookie,所以会共享一个Session。

  注意:新开的浏览器窗口会生成新的Session,但子窗口除外。子窗口会共用父窗口的Session。例如,在连接上右击,在弹出的快捷菜单中选择"在新窗口中打开"时,子窗口即可以访问父窗口的Session。

若是客户端浏览器将Cookie功能禁用,或者不支持Cookie怎么办?例如,绝大多数的手机浏览器都不支持Cookie。Java Web提供了另外一种解决方案:URL地址重写。

  URL地址重写是对客户端不支持Cookie的解决方案。URL地址重写的原理是将该用户Session的id信息重写到URL地址中。服务器可以解析重写后的URL获取Session的id。这样即便客户端不支持Cookie,也可使用Session来记录用户状态。HttpServletResponse类提供了encodeURL(String url)实现URL地址重写,该方法会自动判断客户端是否支持Cookie。若是客户端支持Cookie,会将URL原封不动地输出来。若是客户端不支持Cookie,则会将用户Session的id重写到URL中。

  注意:TOMCAT判断客户端浏览器是否支持Cookie的依据是请求中是否含有Cookie。尽管客户端可能会支持Cookie,可是因为第一次请求时不会携带任何Cookie(由于并没有任何Cookie能够携带),URL地址重写后的地址中仍然会带有jsessionid。当第二次访问时服务器已经在浏览器中写入Cookie了,所以URL地址重写后的地址中就不会带有jsessionid了。

 

3、不一样用户使用同名session会互相干扰吗 ?

奇怪,不一样用户使用同名session会互相干扰吗
session是在应用网页的ASP中直接使用的,若是第二个用户也用到这个网页,会取到第一个用户存在该session的值.

个人网页直接使用
Session("SessionDis") = "1"

是否是须要在Global.asa中定义?

 

若是会干扰,那你session("username")不是没用啦,每个session都会有一个sessionid并且是惟一的

IIS根据客户端IP和客户端浏览器cookie来区分用户
因此不会干扰

不可能存在干扰的。seeion是对话变量,每一个用户对话有本身特有的sesion。

 

4、session运行流程

客户端访问服务器的时候回带上cookie,若是cookie里面存了sessionid,那么服务器一会儿就能判断用户了。

客户端第一次带的cookie是没有sessionid的,登陆以后,那么cookie中就有sessionid了,而后在cookie和session的有效期里面,服务器端就能判断用户。服务器端是根据sessionid来判断用户的,每个用户的sessionid都不一样。

相关文章
相关标签/搜索