• 深入了解 Session 与 Cookie


    Java —— 深入了解 Session 与 Cookie

     

    Java web


     

    了解Cookie和Session

     

    定义

    1、很通俗的来讲,Cookie就是浏览器的缓存,就是用户访问网站时保存在浏览器的一小段文本信息。

    2、很通俗的来讲,Session就是会话控制,一个会话就是一个浏览器访问该网站的整个过程。Session把关于本次会话的配置信息以及该用户的一些信息保存在服务端。

     

    区别

    1、大家都是缓存,Cookie是保存在客户端(浏览器),Session是保存在服务端。

    2、Cookie的保存时间自由设定,当超过设定时间时Cookie过期,过期后信息被删除。Session的保存时间也是自由设定,不过一般设定为半个小时,超过设定时间或者会话结束(关闭浏览器)时,该会话对应的Session信息被删除。

    3、Cookie有数量和大小的限制,Session没有或者说能支持非常大的数据量。

     

    作用

    Session与Cookie的作用都是为了保持访问用户与后端服务器的交互状态。

     

    联系

    1、Cookie需要Session 
    Cookie有着太多的缺点,需要Session来弥补。如数量限制,大小限制,安全性。 
    2、Session依赖于Cookie 
    Session保存了所有客户端访问服务端的会话信息,需要Cooekie中保存的JSESSIONID的值与Session中区分客户端的唯一ID对应,来让该客户端的所有访问能找到对应的Session信息。

     

    深入了解Cookie

     

    Cookie的属性项

    1、NAME=VALUE:键值对,需要保存的信息写在这 
    2、Path:Cookie生成的路径 
    3、Domain:生成该Cookie的域名 
    4、Expires:过期时间 
    5、Secure:设置该属性后只会在SSH连接时才会回传该Cookie

    例子:

    "username=admin;password=000000;JSESSIONID=awi3pd0jf8504n;path=/;Domain=www.baidu.com;expires=Thu Jun 14 2018 01:52:21 GMT+0800"
    

    注意: 
    1、用Cookie存数据时属性名不可以和Cookie自带的属性名相同 
    2、属性和值不能设置成非ASSIC字符

     

    Cookie的相关操作

    Cookie以字符串的形式保存

    1、前端JS操作cookie:

    // 读取cookie信息,如需某个属性值转换成数组遍历即可
    var cookies=document.cookie;
    // 声明一个字符串,字符串中为cookie的信息
    var cookie1="username=admin";
    // 添加cookie
    document.cookie=cookie1;
    // 修改cookie,给要改的属性重新赋值
    document.cookie="username=linchen";
    // 删除cookie,给cookie的过期时间重新赋值为昨天
    document.cookie="expires="+(new Date()-1);
    

    2、Java操作cookie:

    JDK里javax.servlet.http.Cookie提供了cookie的API

     

    Cookie的安全问题

    Cookie就是不安全的!但是我们可以预防!

    cookie存储数据一般遵循以下原则: 
    1、不要保存私人信息。 
    2、任何重要数据,最好通过加密形式来保存数据(最简单的可以用URLEncode,当然也可以用完善的可逆加密方式,遗憾的是,最好不要用md5来加密)。 
    3、是否保存登陆信息,需有用户自行选择。 
    4、长于4K的数据,不要用Cookies。

     

    深入了解Session

     

    Session如何工作

    步骤:

    1. 浏览器访问网站(发起一个会话)
    2. 解析路径参数拿到seesion id
    3. 检查Cookie,如果Cookie中有session id,则覆盖之前的
    4. 运行到request.getSession()拿到该session id
    5. 根据id到sessions容器中查找已经存在的session对象
    6. 不存在则新建一个并添加到sessions容器中,存在则找到对应的session对象
    7. 返回Standard Session 对象
    8. 根据该对象的id新建一个Cookie,并将这个Cookie设置到Http协议头中
     

    Session 操作

    // 获取 Session 对象:
    HttpSession session = requiest.getSession();
    
    // 向HttpSession中保存数据;
    session.setAttribute();
    
    // 从HttpSession中获取数据;
    session.getAttribute();
    
    // 从HttpSession中移除数据;
    session.removeAttribute();
    
    // 返回HttpSession的唯一标识符;
    session.getId();
    
    // 设置session的存活时间(单位是秒),默认为30分钟;
    session.setMaxInactiveInterval();
    
    // 销毁HttpSession
    session.invalidate();
    

    ※ 提示: (之前有说错)
    javax.servlet.http.HttpSession类和javax.servlet.http.Cookie类 
    的jar包不在jdk里面,而tomcat的lib目录里面有,我们可以选择运行环境为tomcat来使用它们,也可以把这个jar包拷到项目里。

     

    扩展(待以后补充)

     

    分布式Session框架

    1. 需要一个服务订阅服务器
    2. ……
     

    Session与Cookie的跨域共享

    ……

     

    多终端Session统一

    ……

     

    单点登录

    单点登录原理与简单实现: 
    https://www.cnblogs.com/ywlaker/p/6113927.html

  • 相关阅读:
    实用的设计模式【一】---类设计法则
    vimium 使用心得
    记一次给部门做分享的心得
    centos7安装docker和docker compose【转】
    docker 部署 jenkins
    centos删除docker0虚拟网卡
    CentOS7查看和关闭防火墙
    .Net Core Autofac实现依赖注入
    【转】Docker基础
    【转】使用Docker+Jenkins自动构建部署
  • 原文地址:https://www.cnblogs.com/qq765065332/p/9358281.html
Copyright © 2020-2023  润新知