session 和 cookie 是网站浏览中较为常见的两个概念,也是比较难以辨析的两个概念,但
它们在浏览需要认证的服务页面以及页面统计中却相当关键。我们先来了解一下 session 和
cookie 怎么来的?考虑这样一个问题:
如何抓取一个访问受限的网页?如新浪微博好友的主页,个人微博页面等。
显然,通过浏览器,我们可以手动输入用户名和密码来访问页面,而所谓的“抓取”,其实
就是使用程序来模拟完成同样的工作,因此我们需要了解“登陆”过程中到底发生了什么。
当用户来到微博登陆页面,输入用户名和密码之后点击“登录”后浏览器将认证信息 POST
给远端的服务器,服务器执行验证逻辑,如果验证通过,则浏览器会跳转到登录用户的微
博首页,在登录成功后,服务器如何验证我们对其他受限制页面的访问呢?因为 HTTP 协
议是无状态的,所以很显然服务器不可能知道我们已经在上一次的 HTTP 请求中通过了验
证。当然,最简单的解决方案就是所有的请求里面都带上用户名和密码,这样虽然可行,但
大大加重了服务器的负担(对于每个 request 都需要到数据库验证),也大大降低了用户
体验(每个页面都需要重新输入用户名密码,每个页面都带有登录表单)。既然直接在请求中
带上用户名与密码不可行,那么就只有在服务器或客户端保存一些类似的可以代表身份的
信息了,所以就有了 cookie 与 session。
cookie,简而言之就是在本地计算机保存一些用户操作的历史信息(当然包括登录信息),
并在用户再次访问该站点时浏览器通过 HTTP 协议将本地 cookie 内容发送给服务器,从而
完成验证,或继续上一步操作。