关于Cookie和Session

Cookie概述

          1 cookie 是当你浏览每个网站时,由WEB服务器置于你硬盘上的一个非常小的文本文件,它可以记录你的用户ID号、密码、浏览过的网页、停留的时间等等。
          2 服务器通过cookie的响应头将cookie发送给客户机,其形式为名称=值
          3 客户机则以文件的形式将cookie存放在本地硬盘上,具体存储位置与浏览器相关
          4 Cookie就是这样的一种机制。它可以弥补HTTP协议无状态的不足。
          5 Cookie在客户端是由浏览器来管理的,浏览器判断一个网站是否能操作另一个网站Cookie的依据是域名。Google与Baidu的域名不一样,因此Google不能操作Baidu.

 


Cookie的有效期


      Cookie的maxAge决定着Cookie的有效期,单位为秒(Second)。Cookie中通过getMaxAge()方法与setMaxAge(int maxAge)方法来读写maxAge属性。
      如果maxAge属性为正数,则表示该Cookie会在maxAge秒之后自动失效。
      如果maxAge为负数,则表示该Cookie仅在本浏览器窗口以及本窗口打开的子窗口内有效,关闭窗口后该Cookie即失效。

 

 


Cookie原理

        Cookie实际上是一小段的文本信息。客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。服务器还可以根据需要修改Cookie的内容。



Cookie使用步骤

   使用Cookie:

      1 创建cookie对象:
        Cookie color = new Cookie(“color”,”red”);

      2 在响应中加入cookie:
          response.addCookie(color);

      3 通过request取回cookie
          Cookie[] cookie = request.getCookies();


Cookie示例
   示例:记录用户访问次数
   

 Cookie[] c = request.getCookies();

int count = 1;

if(c!=null) {      for(int i=0;i<c.length;i++) {
    
     Cookie accountCookie = c[i];
    
     if(accountCookie.getName().equals("accountCount")) {
        
        count = Integer.parseInt(accountCookie.getValue())+1;
        
        break;
        
        }
    }
}
        
response.addCookie(new Cookie("accountCount",String.valueOf(count)));



Session机制

      除了使用Cookie,Web应用程序中还经常使用Session来记录客户端状态。Session是服务器端使用的一种记录客户端状态的机制,使用上比Cookie简单一些,相应的也增加了服务器的存储压力。

 


 什么是Session?

        Session是另一种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,而Session保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上。这就是Session。客户端浏览器再次访问时只需要从该Session中查找该客户的状态就可以了。
      如果说Cookie机制是通过检查客户身上的“通行证”来确定客户身份的话,那么Session机制就是通过检查服务器上的“客户明细表”来确认客户身份。Session相当于程序在服务器上建立的一份客户档案,客户来访的时候只需要查询客户档案表就可以了。

 

Session概述


     1 服务器的一块内存(存key-value)
     2 和客户端窗口对应(子窗口)(独一无二)
     3 客户端和服务器有对应的SessionID
     4 客户端向服务器端发送SessionID的时候两种方式:
           (1)cookie(内存cookie)
           (2)rewriten URL
     5 浏览器禁掉cookie,就不能使用session(使用cookie实现的session)
     6 如果想安全的使用session(不论客户端是否禁止cookie),只能使用URL重写(大大增加编程负担),所以很多网站要求客户端打开cookie

 

 实现用户登录

       Session对应的类为javax.servlet.http.HttpSession类。每个来访者对应一个Session对象,所有该客户的状态信息都保存在这个Session对象里。Session对象是在客户端第一次请求服务器的时候创建的。Session也是一种key-value的属性对,通过getAttribute(Stringkey)和setAttribute(String key,Objectvalue)方法读写客户状态信息。Servlet里通过request.getSession()方法获取该客户的Session


Session的生命周期

       Session保存在服务器端。为了获得更高的存取速度,服务器一般把Session放在内存里。每个用户都会有一个独立的Session。如果Session内容过于复杂,当大量客户访问服务器时可能会导致内存溢出。因此,Session里的信息应该尽量精简。
       Session在用户第一次访问服务器的时候自动创建。需要注意只有访问JSP、Servlet等程序时才会创建Session,只访问HTML、IMAGE等静态资源并不会创建Session。如果尚未生成Session,也可以使用request.getSession(true)强制生成Session。
       Session生成后,只要用户继续访问,服务器就会更新Session的最后访问时间,并维护该Session。用户每访问服务器一次,无论是否读写Session,服务器都认为该用户的Session“活跃(active)”了一次。
   

Session的有效期

      由于会有越来越多的用户访问服务器,因此Session也会越来越多。为防止内存溢出,服务器会把长时间内没有活跃的Session从内存删除。这个时间就是Session的超时时间。如果超过了超时时间没访问过服务器,Session就自动失效了。


会话跟踪

 

Session
       在某段时间一连串客户端与服务器端的“交易”
       在Jsp/Servlet中,如果浏览器不支持Cookie,可以通过URL重写来实现,就是将一些 额外数据追加到表示会话的每个URL末尾,服务器在该标示符与其存储的有关的该会话的数据之间建立关联。如hello.jsp?jsessionid=1234
       可以通过程序来终止一个会话。如果客户端在一定时间内没有操作,服务器会自动终止会话。
       通过HttpSession来读写Session
规则
       如果浏览器支持Cookie, 创建Session的时候会把SessionID保存在Cookie里
       如果不支持Cookie, 必须自己编程使用URL重写的方式实现Session
       response.encodeURL()
转码
      URL后面加入SessionId
      Session不象Cookie拥有路径访问的问题
      同一个application下的servlet/jsp可以共享同一个session, 前提示同一个客户端窗口.

posted @ 2015-07-26 18:47  书海沉思  阅读(174)  评论(0编辑  收藏  举报