关闭浏览器,和浏览器禁用cookie时Session处理的方法

来源:互联网 发布:最好的远程桌面软件 编辑:程序博客网 时间:2024/06/06 02:11

这是看老方的视频体会。一直以来看书以为用户访问一个网站,服务器就会自动帮你创建Session。现在才知道不是的。

Session什么时候生?

并不是你去访问网站时,而是遇到了HttpSeesion session=request.getSession()这段代码。(没有就给你创建一个)

什么时候死?

并不是你关闭浏览器或者去访问其他的网站的时候Session就死了,而是30分钟没有人用就死了。

(当然这时间可以在在WEB.XML里配置)

<session-config>

          <session-timeout>(你想要的时间,分钟为单位)</session-timeout>

</session-config>

现在粗略讲下服务器是如何实现一个session为一个用户浏览器服务的?

浏览器A访问servlet1(HttpSeesion session1=request.getSession()),服务器为其创建一个SeesionID,Servlet 容器又将 Session ID 作为 Cookie 保存在客户的浏览器中。当浏览器A访问servlet2时,客户端就把cookie的里的Session ID带过来,服务器也把之前创建的sessionID带过来,两者进行匹配。


现在问题是:

1,如果用户万一关闭了浏览器,session怎么办呢?

可以设置cookie的最大生命周期,(下面是设置30分钟)

……

HttpSeesion session=request.getSession();

String Sessionid=session.getId();

Cookie cookie=new Cookie("JSEESIONID",sessionid);

Cookie.setPath("/(网站的路径)");

cookie.setMaxAge(30*60);

response.addCookie(cookie);

……

2,如果用户浏览器禁用了cookie,SessionID怎么带过去?

先说说HttpSeesion session=request.getSession();这段代码。

他获取SessionID时,先看看cookie有木有带SessionID过来,再看看超链接有木有带SessionID过来。如果两者都没有,它就创建一个Seesion。带过来了就获取服务器之前创建的SessionID。那么如果浏览器禁用了cookie了,想Seesion还可以用,就要重写URL

HttpServletResponse 接口提供了重写 URL 的方法:public java.lang.String encodeURL(java.lang.String url),此方法能将用户的SessionID追加到网址的末尾,

   <a href=“<%=response.encodeURL(“a.jsp“)%>“>

如果是重定向,就response.sendRedirect(response.encodeRedirectURL("a.jsp"));

这样即使浏览器禁用了cookie,session还是可以用 了。






 

原创粉丝点击