一文读懂Cookie和Session


一文读懂Cookie和Session

什么是Cookie?

        HTTP Cookie(也叫Web Cookie或浏览器Cookie)是服务器发送到用户浏览器并保存在本地的一小块数据,它会在浏览器下次向同一服务器再发起请求时被携带并发送到服务器上。通常,它用于告知服务端两个请求是否来自同一浏览器,如保持用户的登录状态。Cookie使基于无状态的HTTP协议记录稳定的状态信息成为了可能。

为什么要使用Cookie?

        首先我们要知道一个概念,web程序是使用HTTP协议传输的,而HTTP协议是无状态的协议,对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

Cookie什么时候产生?

        Cookie的使用一先要看需求。因为浏览器可以禁用Cookie,同时服务端也可以不Set-Cookie。

        客户端向服务器端发送一个请求的时,服务端向客户端发送一个Cookie 然后浏览器将Cookie保存,Cookie有两种保存方式,一种是浏览器会将CCookie保存在内存中,还有一种是保存在客户端的硬盘中,之后每次HTTP请求浏览器都会将Cookie发送给服务器端。

具体流程如下:

        客户端提交一个HTTP请求给服务端

        服务端这个时候做了两件事,一个是Set-Cookie,还有一个是提交响应内容给客户端 客户端再次向服务器请求时会在请求头中携带一个Cookie

        服务端提交响应内容给客户端

        举例:分登录之前和登录后,登录前服务端给浏览器一个Cookie,但是这个Cookie里面没有用户信息,但是登录成功之后,服务端给浏览器一个Cookie,这个时候的Cookie已经记录了用户的信息,在系统内任意访问,可以实现免登录。

Cookie的生存周期?

        Cookie在生成时就会被指定一个Expire值,这就是Cookie的生存周期,在这个周期内Cookie有效,超出周期Cookie就会被清除。有些页面将Cookie的生存周期设置为“0”或负值,这样在关闭浏览器时,就马上清除Cookie,不会记录用户信息,更加安全。

Cookie有哪些缺陷?

        1、数量受到限制。一个浏览器能创建的 Cookie 数量最多为 300 个,并且每个不能超过 4KB,每个 Web 站点能设置的 Cookie 总数不能超过 20 个。

        2、安全性无法得到保障。通常跨站点脚本攻击往往利用网站漏洞在网站页面中植入脚本代码或网站页面引用第三方法脚本代码,均存在跨站点脚本攻击的可能,在受到跨站点脚本攻击时,脚本指令将会读取当前站点的所有 Cookie 内容(已不存在 Cookie 作用域限制),然后通过某种方式将 Cookie 内容提交到指定的服务器(如:AJAX)。一旦 Cookie 落入攻击者手中,它将会重现其价值。

        3、浏览器可以禁用Cookie,禁用Cookie后,也就无法享有Cookie带来的方便。

什么是Session?Session什么时候产生?

        因为很多第三方可以获取到这个Cookie,服务器无法判断Cookie是不是真实用户发送的,所以Cookie可以伪造,伪造Cookie实现登录进行一些HTTP请求。如果从安全性上来讲,Session比Cookie安全性稍微高一些,我们先要知道一个概念–SessionID。SessionID是什么?客户端第一次请求服务器的时候,服务器会为客户端创建一个Session,并将通过特殊算法算出一个session的ID,下次请求资源时(Session未过期),浏览器会将sessionID(实质是Cookie)放置到请求头中,服务器接收到请求后就得到该请求的SessionID,服务器找到该id的session返还给请求者使用。

Session的生命周期?

        根据需求设定,一般来说,半小时。举个例子,你登录一个服务器,服务器返回给你一个sessionID,登录成功之后的半小时之内没有对该服务器进行任何HTTP请求,半小时后你进行一次HTTP请求,会提示你重新登录。

Session有哪些缺陷?

        因为Session是存储在服务器当中的,所以Session过多,会对服务器产生压力。在我看来,Session的生命周期算是减少服务器压力的一种方式。

Cookie与Session的区别

        (1) cookie数据存放在客户的浏览器上,session数据放在服务器上

        (2) cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗, 考 虑到安全应当使用session。

        (3) session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性 能,考虑到减轻服务器性能方面,应当使用COOKIE。

        (4) 单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个 cookie。

所以个人建议
将登陆信息等重要信息存放为SESSION。
其他信息如果需要保留,可以放在COOKIE中。

总结:如果我们需要经常登录一个站点时,最好用cookie来保存信息,要不然每次登陆都特别麻烦,如果对于需要安全性高的站点以及控制数据的能力时需要用会话效果更佳,当然我们也可以结合两者,使网站按照我们的想法进行运行
一文读懂Cookie和Session