为什么要用Session和Cookie?

  • 因为 Session 和 Cookie 可以记录用户状态信息
  • 其实说到底,cookie、session、token 都围绕了一个点:身份认证。

 

为什么要认证

  • 一个需要登录的动态网站,在登录后需要保持登录状态,以便后续访问网站其他网页

 

HTTP是无状态协议

  • 已经登录过的用户没法通过协议层把状态保存下来,所以下次再请求的时候,服务器还是不知道你是谁。

 

无状态导致的后果?

  • 意味着后续发出的请求需要处理前面请求的响应,则必须重传

 

Session

  • 当服务器收到登录请求之后,生成一个 session id 一起返回给客户端,客户端下次再请求的时候把 session id 一起带上。这时候每个客户端请求对应各自的 session id ,服务就知道怎么区分了。

 

  • 而客户端与服务器之间的会话,一般会使用 Cookie 来管理。
  • 服务在向客户端返回响应时,会在首部字段Set-Cookie内写入 Session ID(如 PHPSESSID=028a8c…)。
  • 客户端接收到从服务器端发来的 Session ID 后,会将其作为 Cookie 保存在本地。

 

产生的问题

  • 由于服务器也要保存这 session信息用于跟客户端传过来的进行比对,数量小了还好,请数量大了,服务器要保存的内容页就越多,会吃不消。
  • session认证本质基于cookie,所以如果cookie被截获,用户很容易收到跨站请求伪造攻击。并且如果浏览器禁用了cookie,这种方式也会失效

 

Token

  • 服务端可以不用保存 token。
  • 当第一次收到客户端传过来的用户名和密码时,服务器认证通过后,通过加密算法生成一个字符串当做 token。当拿到后续请求中的 token,服务器再解析这个token,可以从中获取关键的信息,从而判断该token的有效性。

 

优点:

  • 无状态,可以更方便扩展
  • 更安全,可以防止跨站请求伪造 CSRF
  • 方便多平台跨域
  • 可以标准化,比如基于JWT Json web token (JWT)

原文地址:http://www.cnblogs.com/QingshanY/p/16793444.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性