会话Cookie和持久Cookie

5
据我所知,会话cookie存储在浏览器的进程中(在内存中,而不是硬盘中)。当用户关闭浏览器时,这些cookie将被释放,我们无法再获取这些cookie。因此,这种类型的cookie用于保存会话ID。
持久性cookie保存在硬盘上。它们会一直存在,直到它们过期为止。通常,我们通过设置过期时间来创建这些cookie。
那么我的疑问是:
  1. 如果我们设置一个没有过期时间的cookie,这个cookie将被视为会话cookie吗?它将被保存在浏览器的进程中吗?
  2. 带有过期时间的cookie必须被视为持久性cookie吗?我们可以设置一个带有过期时间的cookie并将其保存在浏览器的进程中吗?
  3. 我们能否使会话cookie不出现在浏览器的进程中?让它留在硬盘上?如果可以,如何编写代码,php/asp.net/java?

会话也保存在用户的机器上。只有在浏览会话过期时,它们才会过期。这就是为什么会话不应保存敏感数据的原因,因为它们可能被劫持。而且不要费心学习如何创建无限会话。它们在某些情况下可能会持续超过浏览会话,但这是一种不好的做法,不值得学习。 - user1928545
会话保存在用户的机器上吗?还是会话保存在服务器上。 - roast_soul
你说得对,@Class,但是会话 ID 是保存在计算机上的。问题说他认为会话 Cookie 存储在内存中而不是硬盘上,但事实并非如此。信息存在于内存中,但键仍然存储在硬盘上。它可能被劫持。 - user1928545
可以,但是将HTTPonly添加到会话cookie很容易。 - Class
@roast_soul 信息保存在服务器上,但密钥保存在硬盘上。我可能会因此受到很多指责,但从技术上讲,它们并没有比cookie更安全。除非网站使用SSL。如果您正在使用php,则可以通过编辑php.ini设置或使用cookie和session来实现在浏览器关闭时持久化的会话cookie。 - user1928545
显示剩余2条评论
1个回答

1
据我所知,我们从服务器发送到客户端的内容存储在用户的硬盘中,就像您所说的那样是“持久性cookie”。而“会话cookie”则存储了您与网站进行的一些交流信息,当您清除缓存或重新启动浏览器后,这些交流信息会被更改。当您访问一个网站时,您不会向服务器发送session_id,因为您还没有一个。然后服务器会生成一个session_id,并在服务器端将交流信息和session_id作为键值对存储,然后将session_id返回给客户端,在“持久性cookie”中进行存储。这是我眼中的过程。

将session_id作为键值对存储在服务器端,并返回session_id到客户端,该客户端存储在持久化cookie中。我认为,session_id不应存储在浏览器进程中的会话cookie中。 - roast_soul
@roast_soul 当我使用servlet时,我发现它是这样工作的。当客户端请求中没有session id时,服务器端会生成session id。 - Judking
@roast_soul 或者类似的情况:所谓的“会话 ID”是在浏览器中生成并存储在客户端的会话 cookie 中,但是 Servlet 有自己的会话机制,因此它创建了自己的“servlet_session_id”(类似于此),该 ID 存储在客户端的持久性 cookie 和服务器端,以存储信息并跟踪浏览器。 - Judking
你使用 Chrome 开发者工具或 Firebug 吗? - roast_soul
@roast_soul 是的,当我第一次向服务器发送请求时,它的 cookie 中没有“jsessionid”。但是当响应返回时,它的 cookie 中有一个“jsessionid”。 - Judking

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接