在php注销什么更好?

时间:2012-03-08 09:03:08

标签: php

我正在讨论什么是更好的登出php的方法,如果有人可以帮我澄清我会非常感激:

我有两个版本的注销代码

1)

$logoutGoTo = "login.php";
if (!isset($_SESSION)) {
  session_start();
}
$_SESSION['username'] = NULL;
$_SESSION['user_id'] = NULL;
unset($_SESSION['username']);
unset($_SESSION['user_id']);
$_SESSION = array();
if ($logoutGoTo != "") {header("Location: $logoutGoTo");
exit;

2)

session_start();
    session_unset();
session_destroy();

哪种解决方案更好?

3 个答案:

答案 0 :(得分:6)

一般情况下都不是因为它们都会破坏整个会话。

会话不仅仅是为了保持用户的登录。会话用于跟踪可能未链接到用户帐户的其他数据,因此您可能不希望在注销时将其销毁。

以此为例,您将语言设置存储在会话中。现在用户注销,您希望保留语言设置但注销用户。如果您销毁会话,则会销毁您的跟踪所有其他数据。

我只是取消/删除保持用户登录的会话变量。

答案 1 :(得分:4)

这取决于你的情况。如果您在会话中保存更多数据然后登录信息,则取消设置整个会话不是一个好主意。否则第二个版本似乎有点清洁。

答案 2 :(得分:0)

这取决于。如果您没有任何其他$ _SESSION变量,并且您的项目有多个开发人员,那么#2绝对是更好的选择。

另一方面,如果您有其他$ _SESSION变量,或者您自己开发所有变量,那么您可能希望使用#1(您将能够跟踪您设置的所有$ _SESSION变量和unset,这对你来说是一个“提醒”,但要注意不要忘记你需要取消设置的任何变量。