Cookie 与 Session 入门:网站怎样记住你
你有没有过这样的体验:刚在一个网站上登录完,点开另一个页面,它还记得你是谁,不用重新登录;可过了一段时间再打开,它又把你忘了,让你重新输入账号密码。网站到底是怎样记住你的?答案藏在两个配合工作的机制里:Cookie 和 Session。
先说一个前提。网站和浏览器之间的对话天生是健忘的。每一次请求都是独立的,服务器处理完就忘,不会主动记住上一次是谁来过。这种特性叫无状态,好处是简单可靠,坏处是没法直接实现登录这样的功能。于是人们想了一个办法:给浏览器发一张小纸条,让它下次来的时候主动出示。
这张小纸条就是 Cookie。它是服务器通过响应头交给浏览器的一小段文本,浏览器把它存下来,之后每次访问同一个网站,都会自动把这张纸条夹在请求里带上。纸条上可以写很多东西,比如你的登录凭证编号、语言偏好、购物车里的商品。网站靠认纸条来认人,而不是靠认你这个人。
但纸条本身有个弱点:它存在浏览器里,内容谁都能看到,也可能被篡改。所以聪明的网站不会把密码之类的敏感信息直接写在纸条上,而是只写一个编号。这个编号就像寄存柜的取件码,真正的物品存在服务器那边。这个存在服务器一侧的记录,就是 Session。
两者的配合是这样的。你登录成功后,服务器在自己的内存或数据库里建一条 Session,记下你的账号、登录时间、权限等信息,同时生成一个唯一的编号,把编号写进 Cookie 发给浏览器。此后你每一次访问,浏览器都带着这个编号来,服务器凭编号找到对应的 Session,就知道你是谁、能做什么。你退出登录时,服务器把这条 Session 删掉,编号也就失效了。
这也解释了为什么有时候网站会突然不认得你。第一种可能,是 Cookie 过期了。纸条可以设定有效期,有的只在浏览器关闭前有效,有的能存几天甚至几个月,到期自动作废。第二种可能,是 Session 在服务器那边过期了。服务器不会无限期保留登录状态,常见的空闲超时是半小时到几小时,超过时间没活动,Session 就被清理。第三种可能,是你换了浏览器或者清除了浏览数据,纸条没了,网站自然认不出你。
还有一个常见的疑问:为什么有时关掉浏览器再打开,登录状态还在?那是因为网站把 Cookie 的有效期设得比较长,并且把它存在硬盘上而不是只存在内存里。反过来,有些网站为了安全,每次关闭浏览器就要求重新登录,用的就是只在会话期间有效的 Cookie。
Cookie 和 Session 各有分工。Cookie 负责携带和传递,是浏览器手里的凭证;Session 负责保存状态,是服务器手里的账本。只用 Cookie 不用 Session,敏感信息容易泄露;只用 Session 不用 Cookie,浏览器就没办法在每次请求时证明自己是谁。两者缺一不可。
理解了这对搭档,你也能更好地保护自己的账号。公共电脑上用完网站记得点退出,而不是直接关掉页面,因为只有关掉页面,Cookie 可能还留着,下一个人打开同一个网站可能直接进入你的账号。看到网站让你勾选记住我时,要明白它只是在延长 Cookie 的有效期,自己的电脑上用没问题,别人能碰到的电脑上最好别勾。
下次登录一个网站时,不妨留意一下:它记住你的方式,就是一张小纸条加一本服务器上的账本。简单,却支撑起了整个互联网的登录体验。
- 点赞
- 收藏
- 关注作者
评论(0)