会话和cookie之间的关系

P S*_*ngh 4 cookies session

我了解到SESSION和之间的区别,COOKIE但我试图找到两者之间的关系.我检查了多个网站,但无法得到相关的答案,并留下了困惑.是否在用户的浏览器或系统上生成了cookie?有人说它是在系统上生成的,而其他一些链接则表示它们是在用户的浏览器上创建的.会话也以cookie或cookie文件的形式保存.真的吗?

Ben*_*min 22

曲奇饼

Cookie只是存储在用户浏览器中的键值对.Cookie将作为包含您请求的网页的HTTP响应的一部分发送到您的浏览器.

当您的浏览器收到cookie时,它会将其存储起来,然后将其发送回服务器,并在同一网站上发出后续请求.

由于cookie是HTTP请求和响应标头的一部分,因此它们的大小有限.

存储在cookie中的典型信息:

  • 会话ID(见下文)
  • 跟踪ID(Google Analytics等)
  • 用户偏好(首选语言或货币等)

对于较大或敏感的数据,通常会在会话中存储值.cookie仅用于识别正确的会话.

可以将cookie配置为仅在浏览器窗口关闭之前生效,或者具有可配置的生命周期(1周,1个月,1年,无论如何).如果您在此期间再次访问该网站,您的浏览器将在每次请求时发送cookie.

会议

会话是存储在服务器上的一组数据,通常作为键值对.例如,会话被分配伪随机秘密ID,该秘密ID通常使用cookie存储在用户的浏览器中SESSID=abcdef123456789.会话ID通常与包含服务器上的会话数据的文件的名称匹配.

会话通常是短暂的,如果不使用一段时间(大约20分钟左右)会自动删除.

存储在会话中的典型信息:

  • 当前登录用户的ID
  • 购物车
  • ......你能想到的任何东西,当会话到期时可以安全删除

假设我是第一次访问网站.该网站检测到我没有发送会话cookie,因此它为我创建了一个会话.它在服务器上创建会话文件,例如/tmp/sess_abcdef123456789.

然后它发送一个带有包含网页的HTTP响应的cookie头:

HTTP/1.1 200 OK
Set-Cookie: SESSID=abcdef123456789
Run Code Online (Sandbox Code Playgroud)

我的浏览器存储了这个cookie.如果我访问同一服务器上的另一个页面,我的浏览器将发送此cookie并附带请求:

GET /cart HTTP/1.1
Cookie: SESSID=abcdef123456789
Run Code Online (Sandbox Code Playgroud)

当接收到第二个请求时,服务器可以检查是否存在具有此ID的会话文件,并使用它来检索会话数据.

您的Web编程语言将为会话提供支持,并且应该为您处理大部分此类复杂性.您通常可以直接使用会话数组/对象,该会话数组/对象将填充特定于访问您网站的用户的会话数据,并且如果您更新会话数据,将自动保存; 这应该对你完全透明.

安全

将用户登录到您的网站时,始终将用户ID存储在会话中.永远不要相信存储在cookie中的用户ID来加载用户数据.

伪造一个cookie非常容易.如果您要根据存储在cookie中的用户ID加载用户信息,则可以轻松更改此cookie中的用户ID以访问您网站上任何用户的帐户.

另一方面,如果将用户ID存储在会话中(分配了伪随机会话ID),则攻击者很难猜测当前分配给用户的会话ID.