PHP: 如何在cookie中存储session

PHP: How to store session in cookie

我是 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 确实将会话存储在 cookie 中 - 单个 cookie,通常称为 PHPSESSID。这对应于服务器上的一个文件(其文件名是 PHPSESSID cookie 的值),它是一组 key/value 对,例如您在上面概述的那些。

只要用户启用了 cookie,会话就可以正常工作。要确保的主要事情是每个响应都使用 session_start();否则您将无法访问 $_SESSION 内的值。

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

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

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

希望对您有所帮助。