如果有会话ID,为什么要使用自动登录cookie?

时间:2014-02-01 17:18:28

标签: php session logging cookies

有人可以解释一下自动登录cookie(自动登录功能)的用途吗?我做了一些搜索,并在其他论坛的类似问题上找到了以下答案:

  

如果关闭自动登录,当用户关闭他/她的浏览器时,或者在一定时间后(配置的PHP引擎),会话数据被破坏,因此,作为副作用,用户的内存登录失败==>实际上用户已注销。   如果您不希望用户每次访问您的WEB站点时显式登录(“手动”,即键入其用户ID和密码),则自动登录功能可以覆盖此行为。为此,有关登录用户的信息存储在比PHP会话更“永久”的内容中:cookie。

我对这句话感兴趣:If autologin is turned off, when the user closes his/her browser....the session data is destroyed。为什么他说sessionid被破坏了?如果它还没有被服务器设置的时间破坏,它就不会被破坏。

我不明白这句话To do so, the information about the user being logged-in is stored in something "more permanent" than the PHP session: a cookie.。是不是sessionId只是另一个cookie?

基于该答案,我只能假设通常自动登录cookie的寿命比会话长,这是使用自动登录的唯一原因。所以这意味着如果我为sessionId cookie设置无限期的生命周期,就不需要自动登录,对吗?

1 个答案:

答案 0 :(得分:2)

首先,“会话cookie”有两个含义:

  • 具有未定义生命周期的cookie,在当前“浏览会话”结束时被丢弃,即当浏览器关闭时(请注意,这不一定是真的)
  • 持有会话ID的Cookie

这里的“PHP会话”是指存储在服务器上的数据文件,以随机id命名,其中(id)以cookie的形式提供给客户端(可能是“会话”(短期)cookie或不)。您可以配置PHP的会话处理和会话cookie详细信息,因此服务器端会话和相应的cookie几乎无限期有效。这本身就是一个完全有效的“永久登录”解决方案,不再需要它。

然而,服务器端会话占用空间,并且在不再使用时也应该被丢弃,以使当前正在使用的会话ID池尽可能小(否则劫持随机会话将非常容易) )。因此,您通常不希望使用标准PHP会话进行永久登录。您宁愿生成一个非常长的随机令牌,您将其保存在数据库中,而不是通用会话存储中,这通常是为了更有效地处理计算资源。您仍然为实际的活动登录用户使用标准的短期会话,但是要识别用户长期使用存储在其他位置的单独ID / cookie。

  

当用户关闭他/她的浏览器时......会话数据被销毁

这显然是错误的。浏览器可能会丢弃会话cookie ,这意味着客户端会丢失与服务器端会话存储的“连接”。服务器端会话最终将被垃圾收集。但是一旦浏览器关闭,它肯定不会立即消失。

  

为此,有关登录用户的信息存储在比PHP会话更“永久”的内容中:cookie。

同样,如果您打扰配置它,那么PHP会话可以非常永久,默认值只是有点短。另外,正如你所说,该语句的最后一部分完全没有意义,因为“PHP会话”还包括使用cookie(通常),并且如果 这个cookie 可以非常永久化再次,你又懒得改变默认值。