【问题标题】:PHP: How to store session in cookiePHP:如何将会话存储在 cookie 中
【发布时间】:2015-09-13 02:34:22
【问题描述】:

我是 PHP 新手,目前正在努力解决以下问题:

我有一个登录页面,我可以在其中启动一个会话,到目前为止效果很好。

session_start();
// ...
$_SESSION["Customer"]["username"] = $username;
$_SESSION["Customer"]["email"] = $email;

现在我以前从未使用过会话,但假设一旦用户关闭浏览器,它们就会死掉,我想让他们保持登录状态,这样他们在重新进入页面时就不必这样做。 我的想法是为此使用 cookie,但我不确定如何将会话存储在 cookie 中。

我对此进行了一些研究,并遇到了以下问题,但 我不确定这是否是正确的方法以及如何将其用于我需要的目的
有人可以帮我吗?

session_set_cookie_params ( int $lifetime [, string $path [, string $domain [, bool $secure = false [, bool $httponly = false ]]]] );

lifetime 在我的情况下会尽可能长,
path 可能只是“/”,
secure 会是真的
我不需要httponly

提前非常感谢, 迈克

【问题讨论】:

    标签: php session cookies session-variables session-cookies


    【解决方案1】:

    事实上,php 确实将会话存储在一个 cookie 中——一个单一的 cookie,通常称为PHPSESSID。这对应于服务器上的一个文件(其文件名是PHPSESSID cookie 的值),它是一组键/值对,例如您在上面概述的那些。

    如果用户启用了 cookie,会话将正常工作。主要要确保每个响应都使用session_start();否则您将无法访问$_SESSION 中的值。

    如果您希望此会话 cookie 在浏览器关闭后继续存在,您需要使用在 session_start() 之前调用的 session_set_cookie_params() (documentation here)。

    我绝对建议不要使用“永恒”会话的方法,只是从可扩展性的角度来看 - 请记住每个会话对应于服务器上的一个文件,这些文件可能会在一段时间后建立(尤其是如果您是高流量网站)。

    有一种方法涉及在用户的浏览器上存储一个单独的 cookie,其中包含您的网站可以在 $_COOKIE 中查找的登录信息,从而启用“自动登录”过程,您可以对其进行探索。不过,我不确定这是最安全的方法。

    希望能有所帮助。

    【讨论】:

    • 非常感谢 - 这真的很有帮助!我同意永恒的会话可能是错误的,但是使用上面的方法我可以将它们的寿命设置为一个月左右,对吧?另外,我所有的页面都以 session_start(); 开头。所以应该涵盖。现在,如果我想使用上述内容,我只需在设置会话变量后放置 session_set_cookie_params .. 吗?通读您的答案,听起来单独的 cookie 可能是更好的选择。你有什么建议?
    • 就我个人而言,我会使用session_set_cookie_params,您可以将它放在session_start() 之前。用登录信息存储一个单独的 cookie 感觉有点混乱 - 只是因为在 cookie 中公开存储用户密码不是很好的做法。
    • 谢谢!我同意。我用 session_start() 开始我的所有页面,但设置会话变量发生在我的代码中间的某个地方(即当用户成功登录时)。因此,如果 session_set_cookie_params 需要在 session_start() 之前发生,我会在包含所有页面上的 session_start() 的包含文件中执行此操作吗?
    • 酷,再次感谢 - 你真的帮助了我! :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-06
    • 2014-11-05
    • 2015-06-12
    • 1970-01-01
    • 1970-01-01
    • 2018-01-04
    相关资源
    最近更新 更多