先答:是一对一的关系
背景:http 是无状态的,使用cookie 来共同的完成状态保持,以及身份认证
-
cookie 存在客户端,session 存在服务器。在一次会话过程中,session 可以存储更多的数据
-
怎么实现?如何工作?
- 第一次访问时,浏览器可以计算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
评论
1 / 0