cookie 和 session的区别

区别

  • session 在服务器端,cookie 在客户端(浏览器)session 可以放在 文件、数据库、或内存中都可以。

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

联系

session 的运行依赖 session id,而 session id 是存在 cookie 中的,也就是说,如果浏览器禁用了 cookie ,同时 session 也会失效(但是可以通过其它方式实现,比如在 url 中传递 session_id),用户验证这种场合一般会用 session 因此,维持一个会话的核心就是客户端的唯一标识,即 session id

cookie数据存放在浏览器上,session数据存放在服务器上。一般把登陆信息用session保存。 session会在一定时间内保存在服务器上,当访问增多时,会占用服务器的性能。

例子

在学校旁边的一家面馆,有消费三碗免费一碗的活动。然而一次性消费三碗的可能性很小,需要用某种方式来记录顾客的消费状态,这时就有两种方案:

  • cookie方案: 发给顾客一张卡,上面记录着消费量,一般还有个时限。每次消费的时候顾客只要出示这张卡,则此次消费的状态就被记录下来了。这就是在客户端保持状态。

  • session方案: 同样发给顾客一张卡,但是卡上只有一个卡号,用来标识用户身份,其他什么都没有。每次顾客去消费时,只要出示这张卡,则店员就在店里的记录本上找到卡号所对应的记录,并且添加一些消费信息。这就是在服务器端保存状态的方法。由于session方案需要session id(卡号)将客户端和服务器端连接起来,所以一般session机制需要借助cookie来在客户端保存session id。

当然除了cookie还有一种url重写的方法也能够实现session机制。

还有一种url重写的技术,就是把session id直接附加在URL路径的后面。还有一种表单隐藏字段技术,就是服务器会自动修改表单,添加一个隐藏字段,以便在表单提交时能够把session id传递回服务器。 session id一旦被攻击者而已获得,攻击者可以伪装成请求者对服务器发起请求。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。