Advertisement

8.会话跟踪(Cookie和Session)

阅读量:

0.1概述

会话跟踪是一种在Web程序中常用的追踪技术, 用于追踪用户的整个交互流程. 常见的实现手段包括使用cookie和session这两种技术.

0.2Cookie

Cookie被视为一段文本数据。当客户端发起对服务器的请求时,在服务器需记录用户状态的情况下,则会通过response发送一个Cookie给客户端浏览器,并将其保存。

在浏览器再次访问该网站的时候,在线会将请求的网址与伴随生成的cookie一并发送给服务器处理。

服务器检测Cookie以判断用户的使用状态;同时也可以更新Cookie的内容。

复制代码
 //创建cookie对象

    
 Cookie cookie=new Cookie("key1","value1"); 
    
 Cookie cookie2=new Cookie("key2","value2");
    
 resp.addCookie(cookie); //客户端保存cookie
    
  
    
 //获取cookie
    
 Cookie[] cookies=req.getCookie();

cookie的销毁时机:

1.在默认情况下,只要浏览器关闭,Cookie对象就被销毁掉。

2.可以手动设置cookie的有效时间

复制代码
 void setMaxAge(int expiry)  设置cookie的有效期,以秒为单位

    
 //正值表示cookie将在该值表示的秒数后过期
    
 //负值表示cookie不会被持久化,将在浏览器退出时删除(默认为-1)
    
 //0表示删除cookie

0.3Session

session是另一种记录客户状态的机制。

当客户端浏览器访问服务器时, 服务器会将客户端信息通过某种方式存储在服务器上

当客户端浏览器在再次访问时,则无需在该session中查找用户的当前状态即可

复制代码
 //创建Session。第一次调用时会创建Session会话;第二次调用都是获取前面创建好的Session会话对象

    
 HttpSession session=request.getSession();
    
  
    
 boolean isNew(); 判断是不是当前创建的Session。true代表刚创建;false表示获取之前
    
 session.getId(); 获取Session的会话id。这个id是唯一的
    
  
    
 存取数据
    
 setAttribute("key1","value1");
    
 getAttribute("key1");

HttpSession的的销毁时机:

1.当创建session时会附带着创建一个cookie,该cookie存在浏览器中

2.当浏览器关闭时,只清除了与之相关的cookie

3.而session只有当默认到期时间30分钟到了后才会被销毁

4.可以设置session的到期时间

复制代码
  <!--配置全局的HttpSession的超时时间为5分钟-->

    
 <session-config>
    
     <session-timeout>5</session-timeout>
    
 </session-config>
    
  
    
 //配置单个HttpSession的销毁时间
    
 public void setMaxInactiveInterval(int interval);设置session的超时时间,超过指定时间,session就会被销毁,以秒为单位。默认为30分钟
    
 public void getMaxInactiveInterval();获取session的超时时间

0.4HttpSession与Cookie的区别

相同点:都是跟踪用户的会话技术

不同点:

cookie数据保存在客户端;session保存在服务端。

cookie存储的数据不能超过4k,session没有对数据存储的限制。

cookie不是很安全,别人可以分析本地的cookie进行cookie欺骗。

session会在一定时间内保存在服务器上,会比较占用服务器性能。

session可以保存复杂的数据类型。

全部评论 (0)

还没有任何评论哟~