2017-08-07 169 views
2

這裏,其中用戶登錄去了。我似乎無法能夠註銷當我登錄「記住我」不積極......如何註銷,並不能正常註銷用PHP?

while($user = $stmt->fetch(PDO::FETCH_ASSOC)) { 
     $passwordDB = $user['mypassword']; 
     $email = $user['email_address']; 
     $userid = $user['user_id']; 
    } 

if ($remember_me == "true"){ // Create a Cookie if remember_me is active 
     $expire = time()+60*60*24; // Valid for only 1 day 
     setcookie("cookie_username", $username, $expire, "/"); 
     setcookie("cookie_email", $email, $expire, "/"); 
     setcookie("cookie_userid", $userid, $expire, "/"); 

    } else if ($remember_me == "false") { // Only create a session if remember_me is not active 
       session_start(); // cannot logout if i put it here 
       $_SESSION['session_userid'] = $userid; 
       $_SESSION['session_username'] = $username; 
       $_SESSION['session_email'] = $email; 

      } 

我的PHP代碼註銷

<?php 

require_once 'mydatabase.php'; 

$_SESSION = array(); 

if (ini_get("session.use_cookies")) { 

$params = session_get_cookie_params(); 
setcookie(session_name(), '', time() - 86400, 
    $params["path"], $params["domain"], 
    $params["secure"], $params["httponly"] 
); 

} 

?> 

當我的'記住我'選中時,我可以正確註銷。 問題解決:我不小心抹去我session_start()在我註銷的頂部,忘了把它放回

+0

您可以張貼在您檢查,如果用戶登錄的代碼?我假設你需要重置所有字段的cookie值。使用瀏覽器的網絡開發工具來查看設置了哪些值 – BNT

回答

0

要殺死所有的會話變量,你可以嘗試一些類似於此

if(isset($_SESSION)){ 

    $vars=array(
     'session_userid', 
     'session_username', 
     'session_email' 
    ); 

    foreach($vars as $var){ 
     @unset($_SESSION[ $var ]); 
    } 

    @session_unset(); 
    @session_destroy(); 
    @session_start(); 
    @session_regenerate_id(true); 
} 
0

不知道你是如何檢查用戶是否登錄,id假定你需要在你的登出代碼session_start();

使用developer tools來查看瀏覽器當前持有哪些數據。

+0

我相信我發現我的錯誤...等一下。愚蠢的錯誤,我相信我在註銷php的開始時意外地刪除了我的'session start()',提醒了這一點。現在工作 –

+0

隨時接受我的答案。下一次,粘貼所有的代碼,因爲很少有人有魔法水晶球,看到丟失件;) – BNT

0

我會使用session_start和session_destroy()這樣的:

<?php 
session_start(); 
session_destroy(); 

require_once 'mydatabase.php'; 

if (ini_get("session.use_cookies")) { 

$params = session_get_cookie_params(); 
setcookie(session_name(), '', time() - 86400, 
    $params["path"], $params["domain"], 
    $params["secure"], $params["httponly"] 
); 

} 
+0

也許首先刪除會話cookie,然後銷燬會話? – BNT