我了解了 SESSION
和 COOKIE
之间的区别,但是我正在尝试找到它们之间的关系。我查看了多个网站,但无法得到相关的答案,感到困惑。Cookie 是在用户浏览器上生成还是在系统上生成?有些人说它是在系统上生成的,而其他链接则说它们是在用户浏览器上创建的。此外,会话以 cookie 或 cookie 文件的形式保存。这是真的吗?
一个cookie只是一个存储在用户浏览器中的键值对。当您请求网页时,cookie将作为HTTP响应的一部分发送到您的浏览器。
当浏览器接收到cookie时,它会将其存储,并在同一网站上进行的每个后续请求中将其发送回服务器。
由于cookie是HTTP请求和响应标头的一部分,因此它们的大小受到一定限制。
通常存储在cookie中的信息:
对于较大或敏感数据,通常将值存储在会话中。 cookie仅用于标识正确的会话。
可以配置cookie仅在关闭浏览器窗口之前存在,或具有可配置的生命周期(1周、1个月、1年等)。如果在此期间再次访问网站,则您的浏览器将在每个请求中发送cookie。
会话是通常作为键值对存储在服务器上的一组数据。会话被分配一个伪随机的秘密ID,该ID通常使用cookie在用户的浏览器中存储,例如SESSID=abcdef123456789
。会话ID通常与包含会话数据的文件名匹配。
会话通常具有短暂的生命周期,并且如果一段时间未使用(约20分钟),则会自动删除。
通常在会话中存储的信息:
假设我第一次访问一个网站。该网站检测到我没有发送会话cookie,因此为我创建了一个会话。它在服务器上创建一个会话文件,例如/tmp/sess_abcdef123456789
。
然后它将带有包含网页的HTTP响应的cookie标头发送:
HTTP/1.1 200 OK
Set-Cookie: SESSID=abcdef123456789
我的浏览器存储了这个cookie。如果我访问同一服务器上的另一页,我的浏览器将在请求中发送此cookie:
GET /cart HTTP/1.1
Cookie: SESSID=abcdef123456789
当服务器接收到第二个请求时,可以检查是否存在此ID的会话文件,并使用它来检索会话数据。
您的web编程语言将支持会话,并应为您处理大部分复杂性。您通常可以直接使用会话数组/对象,其中已经填充了与访问您网站的用户相关的会话数据,如果您更新会话数据,它们将自动保存;这对您来说应该是完全透明的。
在向您的网站登录用户时,始终将用户ID存储在会话中。 不要相信存储在cookie中的用户ID以加载用户数据。
很容易伪造cookie。如果基于存储在cookie中的用户ID加载用户信息,那么很容易更改此cookie中的用户ID以访问您网站上任何用户的帐户。
另一方面,如果将用户ID存储在会话中,该会话被分配了伪随机会话ID,则攻击者很难猜测当前分配给用户的会话ID。
会话(Session)与 Cookie 不同,它将数据存储在服务器上。但是,会话信息存储在用户的 Cookie 中。
会话使用 Cookie 在用户浏览器中存储有关自己的信息。例如,Cookie SSID 包含一个会话标识符,服务器将根据此标识符了解与该用户绑定的会话类型。