在关闭浏览器之前,让用户登录PHP支持的网站的最佳方法是什么?
第一种也是最受欢迎的方式是使用$_SESSION
。第二个是将零作为setcookie
函数的第三个参数传递:setcookie(name, value, 0, domain);
答案 0 :(得分:23)
由于PHP会话实际上是通过cookie存储SID(当然,如果你愿意,你可以使用其他方式来设置SID),只需使用它们就没有太大的区别。
主要区别在于安全性,因为如果您直接使用cookie,客户端可以自己查看和/或编辑它们,但对于会话,数据存储在服务器端,因此客户端无法直接访问。
因此,如果数据仅持续该会话,我更喜欢使用会话。
旁注:如果您使用多台服务器来平衡负载,则应该非常小心,因为默认情况下会话数据本地存储在服务器上。可以跨多个服务器共享会话数据,但这是beyond the scope of this question。或者,您可以将数据存储在数据库中。
答案 1 :(得分:4)
我建议你去参加PHP课程。它很简单,您不必自己处理cookie。
以下是真正销毁会话的代码,复制粘贴自PHP手册中给出的example。
// 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卸载并向服务器发送请求以销毁会话。
答案 2 :(得分:3)
会话就是为了这个目的,所以我会选择。
答案 3 :(得分:3)
“会话不依赖于允许cookie的用户。他们的工作方式就像一个令牌,允许在用户打开浏览器时访问和传递信息。会话的问题是,当你关闭浏览器时,你也会丢失会话因此,如果您有一个需要登录的站点,则无法将其保存为像cookie那样的会话,并且每次访问时都会强制用户重新登录。
你当然可以充分利用这两个世界!一旦你知道每个人做了什么,你就可以使用cookie和会话的组合,使你的网站完全按照你想要的方式工作。“
答案 4 :(得分:3)
你应该使用$ _SESSION
因为如果启用了cookie,那么无论如何都会使用cookie作为PHP会话标识符。所以写另一个cookie不是最佳的。
您想要使用cookie而不是会话的唯一原因是,如果您想要负载平衡。因此,如果您有2台服务器且其中一台服务器出现故障,则该服务器上的会话将丢失。现在,将要求登录用户(在服务器1上有会话)再次登录。但如果他有一个cookie,他就不会被要求再次登录。
答案 5 :(得分:2)
每个域限制cookie,您可以设置20个cookie,每个域的最大大小为4kb
答案 6 :(得分:1)
我会更轻松地使用 $ _ SESSION 。 :P无论如何,如上所述,决定你的情况..如果你需要保持用户登录一段时间,即使在浏览器关闭后使用cookie但正确。它可能对您构成安全威胁!否则使用session。