资讯专栏INFORMATION COLUMN

Cookie 和 Session

monw3c / 940人阅读

摘要:服务端设置好后,将会通过响应头返回给浏览器。注意是在中发送的,所以之前不能有任何输出。数据存储在客户端,容易被拦截篡改,不安全。数据存放在服务端,安全。当落入第三者时,服务端将无法分辨出是否是合法的请求。

Cookie 起源

当初 W3C 在设计 Cookie 时实际上考虑的是为了记录用户在一段时间内访问 Web 应用的行为路径

由于HTTP 协议是一种无状态协议,当用户的一次访问请求结束后,后端服务器就无法知道下一次来访问的还是不是上次访问的用户。
Cookie 的作用正是在此,由于是同一个客户端发出的请求,每次发出的请求都会带有上一次访问时服务端设置的信息,这样服务端就可以根据之前存入 Cookie 的值来做相应的处理(区分访问的用户等)。

作用

解决了客户端和服务端之间的无状态

通俗地讲就是当一个用户通过 HTTP 协议访问一个服务器的时候,服务器会根据需要设置一些 Cookie 信息(Key/Value 键值对),并给这些数据加上一些限制条件,再以响应头的形式返回给客户端浏览器。在条件符合时这个用户下次访问这个服务器的时候,数据又被完整地带回给服务器。

流程简介

当客户端浏览器发送请求时,会根据自身的设置找寻相应条件下的 Cookie 信息并解析。若找到,则设置相应的请求头信息,再发送请求,否则直接发送请求。

服务端设置好 $_COOKIE 后,将会通过响应头返回给浏览器。注意: Cookie 是在 header 中发送的,所以之前不能有任何输出。

缺点

每次请求都会携带全部的 Cookie 信息,容易造成不必要的带宽浪费。

每个浏览器对 Cookie 在同一个域名下的个数和每个 Cookie 的总大小(4kb)都有相应的限制。

数据存储在客户端,容易被拦截篡改,不安全。

客户端可以禁用 Cookie,导致功能失效。

难于管理,大型系统里每个应用都会有自己的 Cookie,加上以上的限制,容易出现数据被截取,导致数据丢失。

Session

基于以上的缺点, Session 来了。

流程简介

服务端(默认设置)接受请求时,先查看 $_COOKIE 中是否存在 name 为 PHPSESSID 的键值对(value 为服务端生成的 SESSION_ID:bebfaf6c745c1a6e5f341baf2178113b)。

若不存在(第一次请求),将会自动生成 SESSION_ID,写入到 $_COOKIE 数组中(name 为 PHPSESSID, value 为 SESSION_ID),然后通过响应头返回给浏览器。

若存在(非第一次请求),则根据 value 值到设置的目录下获取相应的文件,反序列化并写入到 $_SESSION 数组供后续使用。

当服务端进行 $_SESSION 设置时,此 $_SESSION 只会维持在内存中。当脚本执行结束时,将会自动把 $_SESSION 序列化后写入到 SESSION_ID 对应的文件中(创建或覆盖)。

优点

只将会话标识符放到 Cookie 里,减少带宽的传输。

可以存储大量的信息,基本没有空间上的限制。

数据存放在服务端,安全。

可以统一集中式管理。

联系

SESSION 为了识别会话,需要传输一个唯一的 SESSION_ID 到客户端。一般情况下,都是借助 Cookie 来传递,当然也可以通过其他方式进行传递。

Session 安全延伸

以上分析得出, Session 需要通过 SESSION_ID 来识别客户端,这就会导致一个安全隐患。当 SESSION_ID 落入第三者时,服务端将无法分辨出是否是合法的请求。

一个简单的防御措施就是:每次请求时都生成一个新的 SESSION_ID 关联到对应的数据并将老的 SESSION_ID 删除。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/22653.html

相关文章

  • sessioncookie

    摘要:的作用就是为了解决协议无状态的缺陷所作的努力。的内容主要包括名字,值,过期时间,路径和域。这种生命期为浏览器会话期的被称为会话。而机制采用的是一种在服务器端保持状态的解决方案。中的有效期默认分钟,也就是说,客户端超过分钟,当前就会失效。 会话控制是什么? cookie和session都是跟踪整个会话过程的技术手段。而会话,就是用户通过浏览器和服务器的一次通话。 为什么要有会话控制? 因...

    ruicbAndroid 评论0 收藏0
  • sessioncookie

    摘要:的作用就是为了解决协议无状态的缺陷所作的努力。的内容主要包括名字,值,过期时间,路径和域。这种生命期为浏览器会话期的被称为会话。而机制采用的是一种在服务器端保持状态的解决方案。中的有效期默认分钟,也就是说,客户端超过分钟,当前就会失效。 会话控制是什么? cookie和session都是跟踪整个会话过程的技术手段。而会话,就是用户通过浏览器和服务器的一次通话。 为什么要有会话控制? 因...

    Salamander 评论0 收藏0
  • sessioncookie机制及laravel框架下相关应用

    摘要:服务器检查该,以此来辨认用户状态。五下的相关应用应用在中配置如下配置项用于设置存储方式,默认是,即存储在文件中,该文件位于配置项配置的路径,即。配置项用于设置有效期,默认为分钟。配置项用于配置数据是否加密。 一、cookie的由来   当用户访问某网站时,web服务器会将部分信息保存到本地计算机上,当用户再次关顾该网站时,服务器会去查看用户是否登录过该网站,如果登录过,就会将这些记录在...

    NicolasHe 评论0 收藏0
  • CookiesSession的区别理解

    摘要:和的区别和理解机制是服务器在本地机器上存储的小段文本并随每一个请求发送至同一个服务器。的作用就是为了解决协议无状态的缺陷所作的努力。这种生命期为浏览器会话期的被称为会话。而机制采用的是一种在服务器端保持状态的解决方案。 Cookies和Session的区别和理解 cookie机制 Cookies是服务器在本地机器上存储的小段文本并随每一个请求发送至同一个服务器。IETF RFC 296...

    RyanQ 评论0 收藏0
  • Cookie Session 区别汇总

    摘要:无状态协议无状态协议,是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。是通过客户端保持状态的解决方案。而这次,信息则存放在请求头了。 HTTP无状态协议 HTTP无状态协议,是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方...

    Kross 评论0 收藏0
  • Cookie Session 区别汇总

    摘要:无状态协议无状态协议,是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。是通过客户端保持状态的解决方案。而这次,信息则存放在请求头了。 HTTP无状态协议 HTTP无状态协议,是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方...

    Jinkey 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<