PHP会话或cookie

时间:2012-06-22 07:06:12

标签: php session cookies setcookie

在关闭浏览器之前,让用户登录PHP支持的网站的最佳方法是什么?

第一种也是最受欢迎的方式是使用$_SESSION。第二个是将零作为setcookie函数的第三个参数传递:setcookie(name, value, 0, domain);

7 个答案:

答案 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和会话的组合,使你的网站完全按照你想要的方式工作。“

http://php.about.com/od/learnphp/qt/session_cookie.htm

答案 4 :(得分:3)

你应该使用$ _SESSION

因为如果启用了cookie,那么无论如何都会使用cookie作为PHP会话标识符。所以写另一个cookie不是最佳的。

您想要使用cookie而不是会话的唯一原因是,如果您想要负载平衡。因此,如果您有2台服务器且其中一台服务器出现故障,则该服务器上的会话将丢失。现在,将要求登录用户(在服务器1上有会话)再次登录。但如果他有一个cookie,他就不会被要求再次登录。

答案 5 :(得分:2)

每个域限制cookie,您可以设置20个cookie,每个域的最大大小为4kb

答案 6 :(得分:1)

我会更轻松地使用 $ _ SESSION 。 :P无论如何,如上所述,决定你的情况..如果你需要保持用户登录一段时间,即使在浏览器关闭后使用cookie但正确。它可能对您构成安全威胁!否则使用session。