会话管理:Cookie和Session

为什么进行会话管理

HTTP是一种无状态协议,每次客户端访问web页面时,客户端打开一个单独的浏览器窗口连接到web服务器,由于服务器不会自动保存之前客户端请求的相关信息,所有无法识别一个HTTP请求是否为第一次访问。这就引进了web客户端和服务器端之间的会话,这就是会话管理。

Cookie是HTTP协议里面的,Session是JavaEE的标准

Cookie

Cookies是存储在客户端计算机上的文本文件,其中保留了各种跟踪信息。

简单说,Cookie是个特殊的数据,浏览器得到它之后会存储下来,下次请求时会自动传送过去。

浏览器首次访问服务器,会接受到服务器创建好的cookie,下次访问的时候会携带者cookie访问

会话管理:Cookie和Session_第1张图片

会话管理:Cookie和Session_第2张图片 

后端进行cookie创建和传送

cookie是用key-value的形式存储的

创建Cookie对象,调用Cookie的构造方法,给出Cookie的名称和Cookie的值,二者都是字符串

Cookie c = new Cookie(“userName”,”a1234”)

设置最大时效、访问路劲

– 如果要告诉浏览器将Cookie存储到磁盘上,而非仅保存在内存中

c.setMaxAge(24 * 60 * 60); // 设置 Cookie 的有效期为一天(以秒为单位)
c.setPath("/"); // 设置 Cookie 的路径,使其在整个应用程序中可用

将Cookie放入到HTTP响应中,如没有这一步,将不会有任何Cookie被发送到浏览器

response.addCookie(c)

从客户端获取Cookie

调用request.getCookies

        得到Cookie对象组成的数组

        循环数组,调用每个对象的getName找到想要的cookie

        根据应用程序调用getValue方法使用这个Cookie

Cookie[] cookies = request.getCookies();
if(cookies != null)
{
    for(Cookie cookie : cookies)
    {
        if("userId".equals(cookie.getName()))
        {
            //doSomethingWith(cookie.getValue());
        }
    }
}

浏览器查看cookie

会话管理:Cookie和Session_第3张图片

优缺点

• 优点

– 可配置到期规则,数据可持久保存

– 不需要服务器资源,数据保存在客户端,服务器压力小

– 简单性,基于文本的Key-Value对

• 缺点

– 大小受到限制(总数300;20/站点;4KB/Cookie)

– 用户可禁用客户端接收Cookie的功能

– 潜在的安全风险,密码什么的存到浏览器上不安全

Session

Session的数据信息存放在服务器上,Session依赖于Cookie,但是他把信息存储到服务器上,会更安全,浏览器上存的Cookie是SessionID。

Session是JavaEE的标准

服务器设置Session,浏览器访问之后,用Cookie存储上SessionID,下次访问带上SessionID

会话管理:Cookie和Session_第4张图片

使用Session

Session也是 key-value类型

• 通常分三个步骤
    – 获取一个与请求相关联的会话
        • HttpSession session = request.getSession();
    
    – 从Session中设置一个属性
        • session.setAttribute(“userName”,userName);
      – 从Session中获取一个属性
        • session.getAttribute(“userName”);
    
    – 根据需要关闭会话
        • session.invalidate();
        • 通常客户端不提供结束会话的通知,而是Servlet容器在用户处于一段非
        活动期后就会自动的使会话失效——这个时间段称为会话的超时期

浏览器看到SessionID

浏览器存的是 Session的ID,下次浏览器访问的时候会传过来这个SessionID

会话管理:Cookie和Session_第5张图片

优缺点

优点:数据安全

缺点:服务器会有压力

区别

  1. 存储位置不同,Cookie在浏览器,Session在服务器上
  2. 标准不同,Cookie是HTTP协议里面的,Session是JavaEE的标准
  3. 存储类型不同,cookie存储的是字符串(方便传输),Session可以存储java各种类型

 

你可能感兴趣的:(web开发,java,http,html)