让用户在关闭浏览器之前一直登录 PHP 驱动的网站的最佳方法是什么?
第一种也是最流行的方式是搭配$_SESSION
。第二种是将零作为setcookie
函数的第三个参数传递:setcookie(name, value, 0, domain);
由于 PHP session 实际上是通过 cookie 来存储 SID 的(当然你也可以使用其他方式来设置 SID,如果你喜欢的话),简单的使用它们并没有太大的区别。
主要区别在于安全性,因为如果您直接使用 cookie,客户端可以自己查看和/或编辑它们,但对于会话,数据存储在服务器端,因此客户端无法直接访问。
因此,如果数据仅持续该会话,我更喜欢使用会话。
旁注:如果您使用多个服务器来平衡负载,您应该非常小心,因为会话数据默认存储在服务器本地。可以跨多个服务器共享会话数据,但这超出了这个问题的范围。或者,您可以将数据存储在数据库中。
我建议你去参加 PHP 会议。它很简单,您不必自己处理 cookie。
下面是真正销毁会话的代码,复制粘贴自PHP 手册中给出的示例。
// Initialize the session.
// If you are using session_name("something"), don't forget it now!
session_start();
// Unset all of the session variables.
$_SESSION = array();
// If it's desired to kill the session, also delete the session cookie.
// Note: This will destroy the session, and not just the session data!
if (ini_get("session.use_cookies")) {
$params = session_get_cookie_params();
setcookie(session_name(), '', time() - 42000,
$params["path"], $params["domain"],
$params["secure"], $params["httponly"]
);
}
// Finally, destroy the session.
session_destroy();
关于你的问题:
在用户关闭浏览器之前,最好使用什么来保持用户登录?
没有确定用户何时关闭浏览器的万无一失的方法。一种方法是不断地向服务器发送小的 AJAX 请求。当长时间没有看到请求时,销毁会话。
另一种方法是监听 DOM Window 卸载并向服务器发送请求以销毁会话。
“会话不依赖于允许 cookie 的用户。相反,它们像令牌一样工作,允许在用户打开浏览器时访问和传递信息。会话的问题是,当您关闭浏览器时,会话也会丢失。所以,如果您有一个需要登录的站点,则不能像 cookie 那样将其保存为会话,并且用户每次访问时都将被迫重新登录。
您当然可以两全其美!一旦你知道它们各自的作用,你就可以结合使用 cookie 和会话来让你的网站完全按照你想要的方式工作。”
你应该使用 $_SESSION
因为如果启用了 cookie,那么无论如何都会使用 cookie 作为 PHP 会话标识符。所以写另一个cookie并不是最佳的。
您想要使用 cookie 而不是 session 的唯一原因是您想要处理负载平衡。因此,如果您有 2 台服务器并且其中一台出现故障,则该服务器上的会话将丢失。现在登录的用户(在服务器 1 上有会话)将被要求再次登录。但如果他有一个 cookie,就不会要求他再次登录。
每个域的 cookie 有限,您可以设置 20 个 cookie,每个域的最大大小为 4kb
会议就是为此目的,所以我会同意的。
我会使用$_SESSION更容易。:P 无论如何,如上所述,决定你的情况..如果你需要在浏览器关闭后让用户保持登录一段时间,但要正确使用 cookie。它可能对您构成安全威胁!否则使用会话。