会话管理

来源:互联网 发布:sql max用法 编辑:程序博客网 时间:2024/04/27 23:02

定义:用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程 称之为一个会话。

         注:点击浏览器的超链接后,以一个新窗口打开,这个也是同一个会话过程,是基于浏览器的。

保存会话数据的两种技术(实现用户的数据共享)

Cookie

         Cookie是客户端技术,程序把每个用户的数据以cookie的形式写给用户各自的浏览器。当用户使用浏览器再去访问服务器中的web资源时,就会带着各自的数据去。这样,web资源处理的就是用户各自    的数据了。

javax.servlet.http.Cookie类

         public Cookie(String name,String value):构造函数用于封装用户的数据

         setValue与getValue方法:设置或获取Cookie的值

         setMaxAge与getMaxAge方法:设置或获取Cookie的有效期。

                   注意:不设置有效期默认为会话范围,关闭浏览器就没了。

         setPath与getPath方法:设置和获取Cookie的有效目录

                   注意:没设置有效目录默认为当前程序所在目录。

         setDomain与getDomain方法:设置和获取Cookie 的有效域。如设置为 .sina.com以后访问这个域就 待着Cookie。(这个方法没用,浏览器会阻止第三方的Cookie

         getName方法:获取Cookie的名称。

         response接口也中定义了一个addCookie方法,它用于在其响应头中增加一个相应的Set-Cookie头字段。 同样,request接口中也定义了一个getCookies方法,它用于获取客户端提交的Cookie。

案例首页显示用户上次登录的时间public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {//由于有中文显示,防止乱码发生response.setCharacterEncoding("UTF-8");response.setContentType("text/html;charset=UTF-8");PrintWriter  out = response.getWriter();out.write("您上次访问时间是:");//1.获取用户上次访问的时间,显示Cookie cookies[] = request.getCookies();//第一次访问没有时间,所以要注意空的判断for(int i=0;cookies!=null && i<cookies.length;i++){Cookie cookie = cookies[i];//cookie命名为lastAccessTimeif(cookie.getName().equals("lastAccessTime")){long time = Long.parseLong(cookie.getValue());//将毫秒值转成日期对象Date date = new Date(time);out.write(date.toLocaleString());}}//2.把本次的时间以cookie的形式回写给客户机 (lastAccessTime)Cookie cookie = new Cookie("lastAccessTime",System.currentTimeMillis()+"");//如果不设置有效期,当关闭浏览器下次就不会显示时间了cookie.setMaxAge(1*24*60*60);response.addCookie(cookie);}

Cookie注意事项

    1、一个Cookie只能标识一种信息,它至少含有一个标识该信息的名称(NAME)和设置值(VALUE)。

    2、一个WEB站点可以给一个WEB浏览器发送多个Cookie,一个WEB浏览器也可以存储多个WEB站点提    供的Cookie。

    3、浏览器一般只允许存放300个Cookie,每个站点最多存放20个Cookie,每个Cookie的大小限制   为4KB。

    4、服务器端想删除客户端的cookie就可以将setMaxAge的参数设为0则是命令浏览器删除该cookie。

     删除cookie时,path必须一致,否则不会删除

 

Session

         Session是服务器端技术,利用这个技术,服务器在运行时可以为每一个用户的浏览器创建一个其独享的session对象,由于session为用户浏览器独享,所以用户在访问服务器的web资源时,可以把各自       的数据放在各自的session中,当用户再去访问服务器中的其它web资源时,其它web资源再从用户各   自的session中取出数据为用户服务。

Session和Cookie的主要区别在于:

         Cookie是把用户的数据写给用户的浏览器。

         Session技术把用户的数据写到用户独占的session中。

         Session是基于Cookie的。

实现原理

         当访问数据时,服务器就会帮浏览器创建Session对象,每个Session都有个id号,创建完毕后服务器立马会把id号以Cookie的形式回写给浏览器,当下次访问另一个资源时,就会检测有没有这个id号的   Session,这也是为什么拿到同一个Session的原因。(通过这个原理我们帮浏览器实现Cookie的回写,   并设置有效期,就能实现多浏览器共享)每一个Session默认存在30分钟,过后就被摧毁。这个时间      可以在conf的web.xml文件中更改。