PHP session 和 cookie 区别
早上刷购物APP,你选了几件商品放购物车,退出再打开还能看到,这全靠两个“隐形小助手”——session和cookie。很多人分不清它们俩,今天就用你天天用的场景掰明白。
它们存的地方不一样,就像住的地方隔得远
cookie是存在你手机、电脑这种“本地设备”里的。就像你把零食放在自己家抽屉里,每次回家(打开购物APP),先翻自己抽屉里的零食清单,就能知道之前选了啥。APP会把购物车的信息,压缩成一小段文字,存在你浏览器的缓存里,换个浏览器或者清了缓存,这东西就没了。

session是存在网站的服务器里的,也就是商家的“仓库”。你选了商品,商家先给你发一张专属的“取货码”(就是session的ID,不会存具体内容),你带着这个取货码,每次去商家仓库拿货,仓库就知道你是谁,给你看之前的购物车。如果换个账号登录,或者你直接关了网页,过段时间没动,商家就会把你的取货码作废,仓库里的信息也删掉了。
能装的东西不一样,一个带不动大文件
cookie的容量很小,一般最多只能存4KB左右,还不能存敏感信息。就像你家抽屉只能放几包小零食,要是想放一箱苹果肯定塞不下。所以它只能存最简单的信息,比如你上次登录的用户名、“要不要记住我”的开关,没法存太复杂的内容。
session能装的东西就多了,只要服务器空间够,存多少都行,而且是存在服务器里,你看不到。还是拿购物举例,你选的商品详情、优惠信息,都可以存在session里,不用你自己存,也不会因为你清了浏览器就没了,除非你长时间不操作被清空。
安全性不一样,一个怕偷一个怕丢
cookie暴露在本地,要是有人趁你不注意用了你的电脑,或者你在公共网吧没退账号,他就能直接看到你cookie里的信息,甚至可能偷你的取货码?不对,应该是这样:要是cookie没加密,别人拿到你的cookie,就能冒充你的身份登录网站,比如用你的cookie直接进你的购物车下单。
session的信息在服务器里,你拿的只是一个取货码,就算被人偷了取货码,也得去服务器核对是不是你的,而且取货码有有效期,过段时间就失效了。不过要是服务器被黑客攻击,存的session信息也可能泄露,相对来说比cookie安全一点。
用处不一样,一个管本地一个管全局
cookie主要用来管本地的小设置,比如你喜欢的网站主题是深色还是浅色,下次打开自动用这个主题;还有“记住账号密码”,也是靠cookie存的,不然你每次登录都要输密码,太麻烦。
session主要用来管你这次打开网站的“临时状态”,比如你登录了账号,session就帮你保持登录状态,不会每次点页面都要重新登录;还有购物车,要是用session存,你在网站里切换页面,购物车不会消失,关了网页再开才会失效。
这么一看,session和cookie其实是一对配合默契的搭档,没有谁比谁好,只是分工不同。下次再看到这两个词,别再懵了,想想你家抽屉和商家仓库的例子,就能一下子分清楚啦。