前端笔记之基础-cookie和session

介绍:

Cookie和Session都为了用来保存状态信息,都是保存客户端状态的机制,它们都是为了解决HTTP无状态的问题,使某个域名下的所有网页能够共享某些数据。 Session可以用Cookie来实现,也可以用URL回写的机制来实现(如果用户禁用了cookie)。如果只是考虑到用户体验问题的话,用cookie会比较合适,他存储在客户端,读取速度相当快,而session存储在服务器端,但相对于cookie会更加安全。谁先谁后没啥关系,因为都可以独立存在,后面还有token呢。

具体不同:

cookie

session

结论

存储

存储于客户端中,分别有两种状态,一种持久化,是指在你设置了cookie的Expires(设置有效时长)属性,此时cookie将保存到你的硬盘上。另一种内存cookie,是指没有设在cookie的Expires的属性,此时cookie将停留在客户端的内存中。(大小限制在4k左右)

存储在服务器端中,负载均衡会有不少麻烦,可以保存在一个服务器上,但这样就起不了负载均衡的作用了。

cookie还有一个优点,让客户端来分提服务器的负担。

工作流程

1.客户端会发送一个http请求到服务器端。2.服务器通过发送一个名为 Set-Cookie 的HTTP头来创建一个cookie,作为 Response Headers 的一部分。3.客户端收到后它将document 对象的 cookie 属性提供给 JavaScript。可以使用JavaScript来创建和取回 cookie 的值,因此我们可以通过document.cookie访问它。4.再次发起请求,客户端会自动添加cookie在请求头中,服务器收到请求后自动验证信息。

1.客户端访问服务器,服务器调用request.getSession()方法,产生session对象,用于跟踪用户的状态,同时,给session对象分配一个唯一标识sessionId。2.为了管理session对象,以sessionId为键,以session对象为值,封装成Map集合。3.产生响应时,将sessionId以cookie方式发送给客户端,存放在客户端浏览器的缓存中。4.当客户端再次请求服务器,会将sessionId以cookie请求头的方式发送给服务器,服务器得到sessionId后,从Map集合中,得到session对象,从而跟踪状态。

两种方式都是用于识别用户身份,一种存在本地,一种存在服务端,cookie传sessionid不是唯一的方式。

安全性

1.通过加密和安全传输技术(SSL),减少cookie被破解的可能性。2.只在cookie中存放不敏感数据,即使被盗也不会有重大损失。控制cookie的生命期,使之不会永远有效。3.偷盗者很可能拿到一个过期的cookie。

1.session的sessionID是放在cookie里,要想功破session的话,第一要功破cookie。2.功破cookie后,你要得到 sessionID,sessionID是要有人登录,或者启动session_start才会有,你不知道什么时候会有人登录。3.sessionID是加密的,第二次session_start的时候,前一次的sessionID就没有用了,session过期时sessionid也会失效,想在短时间内功破加了密的 sessionID很难。session是针对某一次通信而言,会话结束session也就随着消失了。

如果只是考虑到用户体验,建议使用cookie,涉及到安全信息问题用session比较合适。能用cookie就别用session。