区别
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一旦被攻击者而已获得,攻击者可以伪装成请求者对服务器发起请求。