Session 和 Cookie 关系

先答:是一对一的关系

背景:http 是无状态的,使用cookie 来共同的完成状态保持,以及身份认证

  1. cookie 存在客户端,session 存在服务器。在一次会话过程中,session 可以存储更多的数据

  2. 怎么实现?如何工作?

    • 第一次访问时,浏览器可以计算token(令牌),返回客户端作为cookie的凭证,也是客户端身份的凭证。
    • 还可以把相关的数据一起发送给客户端。后面客户端再次访问,HPPT报文会自动将cookie放在head发送给浏览器。
    • 以购物为例,客户端添加了2件商品到购物车,跳转到结账页面,服务器才能知道你购买了什么。
    • 在服务端,Threadlocal 可以用来实现这样的 Session-cookie机制。在我的项目中,使用用户信息以及一段UUID作为cookie的token来实现。用户访问时,通过一个拦截器的preHandler方法,来扫描请求参数有无cookie(直接命为"token")
    • 用ThreadLocal 存储 session,封装在一个UserContex 类里
    • Session不一定必须依赖Cookie,这也是Session相比Cookie的高明之处。当客户端的Cookie被禁用或出现问题时,PHP会自动把Session ID附着在URL中,这样再通过Session ID就能跨页使用Session变量
    • cookie数据存放在客户的浏览器(客户端)上,session数据放在服务器上,但是服务端的session的实现对客户端的cookie有依赖关系的;
    • cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,考虑到安全应当使用session;
    • session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能。考虑到减轻服务器性能方面,应当使用COOKIE
    • 单个cookie在客户端的限制是3K,就是说一个站点在客户端存放的COOKIE不能超过3K
end
  • 作者:(联系作者)
  • 发表时间:2022-03-24 16:18
  • 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)
  • 转载声明:如果是转载栈主转载的文章,请附上原文链接
  • 公众号转载:请在文末添加作者公众号二维码(公众号二维码见右边,欢迎关注)
  • 评论




    1 / 0