Cookie和Session

一、Cookie

    Cookie是存储在客户端的,两个版本,version-0和version-1

    1.Cookie version-0 的属性

        NAME = VALUE : 这里的Name就是我们日常说的key,value就是我们存储的数据,Name不能和其他的name相同

        Expires :过期时间,在设置的某个时间点cookie就会失效

        Domain:域名

        Secure:如果设置了此属性,那么只有在SSH连接时才会传回Cookie

    2.Cookie version-1 的属性,只列举和version-0不一样的属性

        Max-age:最大失效时间时间,代替version-0中的expires,这个参数的单位是秒,意思是*秒后Cookie过期

        Port:端口,在访问某端口时候传回Cookie,支持多个,用“,”隔开即可

      Version:如果设置setCookie2属性或者设置此属性为1或者使用version-1中的属性,那么就是version-1,如果使用setCookie属性,则version-0

        Discard:在会话结束后是否丢弃该cookie,默认fasle

        Comment:注释

        CommentUrl:Url注释

    2.使用Cookie的限制

        各种浏览器对Cookie的支持大概都是50个Cookie/域名,4000多个字节

二、session

    我们的应用如果把用户的一些信息存储到cookie中的话,那么每次浏览器访问服务端都会带着cookie,且不说cookie的限制,这样做会增加网络中数据的传输量,而且,cookie在客户端的浏览器是可以查看的,如果一些登录信息存放到cookie中,那么其他人也可以通过这台计算机的浏览器中的cookie查看其他用户的用户信息,正好,session可以解决这个问题。

    session是存储在服务器端的会话,我们可以通过一个ID来获取session,然后把这个ID存储在cookie中,这就是我们常说的JSESSIONID。

    1.cookie和session配合使用

        session和cookie有3种方式配合使用

        (1)如果客户端和服务器支持cookie,那么在请求时候,会自动带上响应的cookie进行访问。(会按照cookie的作用域选择应该 传输的cookie这种方式是优先的

        (2)基于URL Path Parameter实现(domain:path/action;a=1;b=2?c=3,其中a,b为URL Path Parameter

        (3)基于SSL,默认不支持,需要在tomcat中配置

    2.session是如何工作的

        (1)接受一个请求,先解析url path parameter中的JSESSIONID(web.xml中cookie-config下的name属性就是JSESSIONName,可以自行修改),解析出来JSESSION

            (2)如果客户端和服务器支持cookie,那么从cookie中拿到JSESSIONID并覆盖(1)中的JSESSIONID

            (3)通过JSESSIONID获取SESSION,如果为空则重新创建一个并放入Manager中管理

            (4)根据这个SESSION id 创建一个cookie,并设置到http头中

            (5)SESSION的生命周期由服务端管理,也就是tomcat的session Manager

三、安全性对比

    1.cookie存储在客户端浏览器中,可以被查看和修改,所以cookie安全性比较低

    2.session存储在服务器端,所以安全性更高一些,可以存储重要的数据。

四、分布式session

    现在的项目基本都使用负载均衡,比如nginx作为负载均衡服务器,那么就会产生session一致性问题。

    建议将session存入缓存集中式管理,比如:spring-session-redis

    


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值