首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【HTTP】Cookie和Session

这个问题不管是社招还是校招,都会被高频率的问到。其实是一个很开放的问题,大家按照自己的理解聊就可以。他们两个更多的是联系,而不是区别。

问题引入?

用户来到淘宝网,输入用户名和密码之后点击“登录”后浏览器将认证信息POST给远端的服务器,服务器执行验证逻辑,如果验证通过,则浏览器会跳转到登录成功,在登录成功后,服务器如何验证我们对其他受限制页面的访问呢?因为HTTP协议是无状态的,所以很显然服务器不可能知道我们已经在上一次的HTTP请求中通过了验证。这时候有两种选择:

每次请求的时候都带上用户名和密码

服务端记住你是合法用户.

第一种方法可是可以,但是一旦这样子客户端受不了,每次都要我输入.服务端同样也受不了,服务端需要去数据库查询用户的合法性。所以就有了第二种方式。

会话管理

会话管理

步骤 1: 客户端把用户 ID 和密码等登录信息放入报文的实体部分,

通常是以 POST 方法把请求发送给服务器。 而这时, 会使用 HTTPS

通信来进行 HTML表单画面的显示和用户输入数据的发送。

步骤 2: 服务器会发放用以识别用户的 Session ID。 通过验证从客户

端发送过来的登录信息进行身份认证, 然后把用户的认证状态与

Session ID 绑定后记录在服务器端。

步骤 3: 客户端接收到从服务器端发来的 Session ID 后, 会将其作为

Cookie 保存在本地。 下次向服务器发送请求时, 浏览器会自动发送

Cookie, 所以 Session ID 也随之发送到服务器。 服务器端可通过验证

接收到的 Session ID 识别用户和其认证状态。

不要混淆 session 和 session 实现。本来 session 是一个抽象概念,开发者为了实现中断和继续等操作,将 user agent 和 server 之间一对一的交互,抽象为“会话”,进而衍生出“会话状态”,也就是 session 的概念。 而 cookie 是一个实际存在的东西,http 协议中定义在 header 中的字段。可以认为是 session 的一种后端无状态实现。而我们今天常说的 “session”,是为了绕开 cookie 的各种限制,通常借助 cookie 本身和后端存储实现的,一种更高级的会话状态实现。所以 cookie 和 session,你可以认为是同一层次的概念,也可以认为是不同层次的概念。具体到实现,session 因为 session id 的存在,通常要借助 cookie 实现,但这并非必要,只能说是通用性较好的一种实现方案。

总结下:

Session(ID)是在服务端保存的一个数据结构,用来跟踪用户的状态,这个数据可以保存在集群、数据库、文件中;Cookie是客户端保存用户信息的一种机制,用来记录用户的一些信息,也是实现Session(会话)的一种方式。

实例

所以如果你去外面连接了不安全的网络,session就被劫持了,就可以模拟你的用户来干各种坏坏的事情咯。前两天在群里说的我模拟请求登录牛客网就是这么干的,用浏览器看下Cookie,就可以模拟请求啦。

热门阅读

少一些功利主义的追求,

多一些不为什么的坚持!

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180815G0A8O500?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券