这是看老方的视频体会。一直以来看书以为用户访问一个网站,服务器就会自动帮你创建Session。现在才知道不是的。
Session什么时候生?
并不是你去访问网站时,而是遇到了HttpSeesion session=()这段代码。(没有就给你创建一个)
什么时候死?
并不是你关闭浏览器或者去访问其他的网站的时候Session就死了,而是30分钟没有人用就死了。
(当然这时间可以在在里配置)
<session-config>
<session-timeout>(你想要的时间,分钟为单位)</session-timeout>
</session-config>
现在粗略讲下服务器是如何实现一个session为一个用户浏览器服务的?
浏览器A访问servlet1(HttpSeesion session1=()),服务器为其创建一个SeesionID,Servlet 容器又将 Session ID 作为 Cookie 保存在客户的浏览器中。当浏览器A访问servlet2时,客户端就把cookie的里的Session ID带过来,服务器也把之前创建的sessionID带过来,两者进行匹配。
现在问题是:
1,如果用户万一关闭了浏览器,session怎么办呢?
可以设置cookie的最大生命周期,(下面是设置30分钟)
……
HttpSeesion session=();
String Sessionid=();
Cookie cookie=new Cookie("JSEESIONID",sessionid);
("/(网站的路径)");
(30*60);
(cookie);
……
2,如果用户浏览器禁用了cookie,SessionID怎么带过去?
先说说HttpSeesion session=();这段代码。
他获取SessionID时,先看看cookie有木有带SessionID过来,再看看超链接有木有带SessionID过来。如果两者都没有,它就创建一个Seesion。带过来了就获取服务器之前创建的SessionID。那么如果浏览器禁用了cookie了,想Seesion还可以用,就要重写URL
HttpServletResponse 接口提供了重写 URL 的方法:public encodeURL( url),此方法能将用户的SessionID追加到网址的末尾,
<a href=“<%=(““)%>“>
如果是重定向,就response.sendRedirect((""));
这样即使浏览器禁用了cookie,session还是可以用 了。