java web之会话笔记

一、会话概述

1、什么是会话?如同打电话

2、会话过程要解决的问题是什么?

保持各个客户端自己的数据。

二、Cookie

由于Cookie数据是由客户端来保存和携带的,所以称之为客户端技术

java web之会话笔记

1、属性:

  • name:名称不能唯一确定一个Cookie。路径可能不同。
  • value:不能存中文。
  • path:默认值是写Cookie的那个程序的访问路径
    • 比如:http://localhost:8080/day10_00_cookie/servlet/ck1写的Cookie
      • path就是:/day10_00_cookie/servlet 看当前创建cookie的资源(servlet)文件路径
      • 客户端在访问服务器另外资源时,根据访问的路径来决定是否带着Cookie到服务器
      • 当前访问的路径如果是以cookie的path开头的路径,浏览器就带。否则不带。

 

  • maxAge:cookie的缓存时间。默认是-1(默认存在浏览器的内存中)。单位是秒。
    • 负数:cookie的数据存在浏览器缓存中
    • 0:删除。路径要保持一致,否则可能删错人。
    • 正数:缓存(持久化到磁盘上)的时间

 

 

  1. //获取客户端保存的最后访问时间  
  2. Cookie[] cookies = request.getCookies();  
  3. for (int i = 0;cookies!=null && i < cookies.length; i++) {  
  4.     if("lastAccessTime".equals(cookies[i].getName())){//判断当前Cookie中的name是否是想要的cookie  
  5.         long l = Long.parseLong(cookies[i].getValue());//如果是想要的Cookie,则把Cookie中的value取出  
  6.         out.write("你的最后访问时间为:"+new Date(l).toLocaleString());//yyyy-MM-dd  
  7.     }  
  8. }  
  9.    
  10. //创建cookie  
  11. Cookie ck = new Cookie("lastAccessTime",System.currentTimeMillis()+"");  
  12. //设置cookie的有效时间,单位是秒  
  13. ck.setMaxAge(60*5);//保存时间为5分钟  
  14. //设置cookiepath  
  15. //ck.setPath("/day10_00_cookie");  
  16. //ck.setPath(request.getContextPath());//  /day10_00_cookie  
  17. ck.setPath("/");//  /day10_00_cookie  
  18. //cookie信息写回到客户端  
  19. response.addCookie(ck);  

 

 

 

三、HttpSession

1、为什么要学HttpSession?

> 它也是一个域对象: session servletContext request

> 同一个会话下,可以使一个应用的多个资源共享数据

> cookie客户端技术,只能存字符串。HttpSession服务器端的技术,它可以存对象

2、常用方法

把数据保存在HttpSession对象中,该对象也是一个域对象。

void setAttribute(String name,Object value);

Object getAttribute(String name);

void removeAttribute(String name);

HttpSession.getId():

 

setMaxInactiveInterval(int interval) 设置session的存活时间

invalidate() 使此会话无效

 

3、getSession():内部执行原理

HttpSession request.getSession():内部执行原理

1、获取名称为JSESSIONID的cookie的值。

2、没有这样的cookie,创建一个新的HttpSession对象,分配一个唯一的SessionID,并且向客户端写了一个名字为JSESSIONID=sessionID的cookie

3、有这样的Cookie,获取cookie的值(即HttpSession对象的值),从服务器的内存中根据ID找那个HttpSession对象:

找到了:取出继续为你服务。

找不到:从2开始。

 

 

HttpSession request.getSession(boolean create):

参数:

true:和getSession()功能一样。

false:根据客户端JSESSIONID的cookie的值,找对应的HttpSession对象,找不到返回null(不会创建新的,只是查询)。

 

 

3、客户端禁用Cookie后的会话数据保存问题

客户端禁用cookie:浏览器永远不会向服务器发送cookie的请求消息头

 

解决方案:

方案一:在主页上给出提示:请不要禁用您的cookie

方案二:URL重写。必须对网站的所有地址都重写。

 

http://url--->http://url;JSESSIONID=111

 

response.encodeURL(String url);

看浏览器有没有发送cookie请求消息头,没有就重写URL,有就不重写。

 

request.getSession();必须写

 

4.session的状态java web之会话笔记java web之会话笔记java web之会话笔记java web之会话笔记java web之会话笔记java web之会话笔记java web之会话笔记java web之会话笔记java web之会话笔记java web之会话笔记