javaWeb Cookie 与 Session

javaWeb Cookie 与 Session

1.0.0 会话的基本概念

在日常生活中,从拨通电话到挂断电话之间的一连串的你问我答的过程就是一个通信会话。Web
应用中的会话过程类似于生活中的打电话过程,它指的是一个客户端(浏览器)与 Web 服务器
之间连续发生的一系列请求和响应过程,关闭浏览器会话结束,例如,一个用户在某网站上的整个
购物过程就是一个会话。
会话过程中会产生数据,数据存储到客户端使用客户端会话对象(cookie),数据存储到服务器端
使用服务器端会话对象(session);特点:服务器端为每个客户端创建会话对象存储数据,只供
这个客户端访问服务器的时候使用。
会话技术主要有客户端 cookie 与服务器端 session 两种

2.0.0 cookie

浏览器端的会话技术,它通过在浏览器中记录一些服务器传递过来的数据(cookie 存储在浏览
器),通过设置 cookie 的有效期决定浏览器存储数据的时间长短。

Cookie 就是浏览器写在客户端本地计算机上的键值对缓存数据,每个键对应的 value 值大小不超过 4kb

2.0.1 cookie 的应用场景
  1. 记住用户名
  2. 自动登录(记住用户名和密码)
2.0.2 cookie 的基本使用
1. Cookie:
Cookie(String name, String value) 创建 cookie 对象
String getName() 获取 cookie 的名称
String getValue() 获取 cookie 的值
void setPath(String uri) 设置 cookie 的路径——浏览器根据这个路径判断那些 cookie 要发
送给服务器
2. HttpServletResponse:
 void addCookie(Cookie cookie) 将 cookie 发送给浏览器
3. HttpServletRequest: Cookie[] getCookies() 获取浏览器发送的 cookie
2.0.3 使用步骤
  1. 在 AddCookieDataSession 创建 cookie
  2. 在 AddCookieDataSession 使用 response 对象将 cookie 发送给浏览器
  3. 在 GetCookieDataSession 通过 request 对象获取浏览器发送的 cookie
  4. 创建 ReadCookieDataSession 演示不能读取 cookie 数据
2.0.4 cookie 技术原理分析

javaWeb Cookie 与 Session_第1张图片 

2.0.5 删除 cookie
  1. 创建 cookie 对象,名称保持一致
  2. 设置生存时间为 0
  3. 设置 cookie 的路径,与原来保持一致
  4. 发送 cookie 给浏览器,覆盖已有 cookie
2.0.6 注意事项

要删除已经存在的 cookie,只需要创建一个一模一样的 cookie 覆盖已有 cookie,新创建的
cookie 必须名称和路径与原来的 cookie 一致,value 清空和有效期设置为 0

//创建 cookie 对象存储数据 
 Cookie cookie = new Cookie("name","");//设置 cookie 数据立刻过期 
 cookie.setMaxAge(0);//设置只允许以“GetCookieDataServlet”资源开头的 servlet 读取 cookie 数据 
 cookie.setPath("/GetCookieDataServlet");//将 cookie 数据输出到浏览器 
 response.addCookie(cookie);

3.0.0 session

session 是服务器端会话对象,是服务器为每个浏览器(每个用户)创建的单独私有存储空间.

服务器会为每个客户端在服务器内存里创建单独的存储空间

Session 技术的特点:

  1. 运行在服务器端,由服务器为每个浏览器创建单独的存储空间对象,称为服务器会话对象。

  2. 每个用户都有自己的会话对象,不同的浏览器代表不同的用户。

  3. 会话对象也是一个域对象,主要用于在服务器端存储每个用户存储自己的数据,不同的用户之间数据不能共享。

3.0.1 session 的与 cookie 的区别

javaWeb Cookie 与 Session_第2张图片

3.0.2 session 的应用场景

服务器端存储的用户私有数据都可以使用 session 存储

  1. 保存购物车数据(可以放到 session 或 cookie,但是放到数据库,任何位置都可以访问)
  2. 保存用户浏览器记录数据(最好放到 cookie)
  3. 保存用户登录信息数据
  4. 保存验证码
3.0.3 session 的基本使用

session 是域对象(会话域对象)

域对象可以存储数据,session 是会话域对象,一次会话过程内有效.从客户端浏览器第一次访问服务器开始,到浏览器关闭,期间可以进行一系列的请求与响应,这个过程称作为一次会话过程.

3.0.4 域对象 API 介绍
  1. HttpServletRequest

    HttpSession getSession() 获取 session 对象

  2. HttpSession

    void setAttribute(String name, Object value) 在 session 中保存数据

    Object getAttribute(String name) 从 session 中获取数据

    void removeAttribute(String name) 从 session 中移除数据

3.0.5 注意事项
  1. getAttribute 方法返回值是 Object,因此需要将返回值强制转换才能方便使用。
3.0.6 session 的有效期

session 的有效期是一次会话内,关闭了浏览器 session 就没用了,但是 session 对象依然存储在服务器内存中,
session 对象并没有销毁,session 默认有效期 30 分钟.距离最后一次请求超过 30 分钟,session 对象过期销毁。

3.0.7 改变会话过期的时间

方式一:在 web.xml 中配置 session 过期时间
1). 通过 web.xml 中的配置


<session-config>
<session-timeout>1session-timeout>
session-config>

2). session-timeout 的解释:

如果设置为 0 或负数,则会话不过期,但受限于服务器的内存空间。

注意:一般没有人会去更改 session 默认 30 分钟有效期

3.0.8 session 实现关闭浏览器继续可以访问数据
  1. 创建一个 servlet
  2. 通过 request 对象获取 session 的 id
  3. 自定义一个 cookie 对象,保存 session 的 id,注意 cookie 名称为"JSESSIONID",设置一个比较长的生存时间
  4. 发送给浏览器
/* 要求:浏览器关闭之后依然可以访问关闭之前的 session 数据
 * */
 //输出 sessionidHttpSession session = request.getSession();String sessionId = session.getId();//服务器再创建 session 的时候会同时写入 cookie,创建一个一模一样的 cookie,设置 cookie 有效期建议 30 分钟 
 Cookie cookie = new Cookie("JSESSIONID",sessionId);
 cookie.setMaxAge(60*30);//输出 cookie 到浏览器 
 response.addCookie(cookie);response.getWriter().write(sessionId);

你可能感兴趣的:(java,javaWeb,java,Cookie,与,Session)