2014-01-20 201 views
1

我看到了很多關於這個問題,即時通訊仍然有問題...有人可以給我一個幫助嗎?在php中銷燬會話

登錄頁面:

<?PHP 
    header("Content-Type: text/html; charset=utf-8"); 
    $login = "root"; 
    $senha = "test"; 
    session_start(); 
    session_set_cookie_params(0); 

    if ($_POST['login'] && $_POST['senha']) { 
     if ($login == $_POST['login'] && $senha == $_POST['senha']) { 

     $_SESSION['login'] = $login; 
     $_SESSION['senha'] = $senha; 
     Header("Location: index.php"); 

     } else { 
      unset ($_SESSION['login']); 
      unset ($_SESSION['senha']); 
      header("Location: login.php"); 
     } 
    } 
?> 

註銷頁面:

<?php 
    session_start(); 

    $_SESSION = array(); 

    unset($_SESSION['login']); 
    unset($_SESSION['senha']); 
    setcookie(session_name(), '', time() - 3600, '/'); 
    session_destroy(); 

    Header("Location: login.php"); 

    exit(); 
?> 

即時得到這個錯誤:

PHP Warning: session_destroy(): Session object destruction failed in \\N\Users\cPanel\gil\public_html\gilberto\logout.php on line 11 
+0

請參考http://stackoverflow.com/questions/3512507/proper-way-to-logout-from-a-session-in-php。 –

回答

0

這是我一貫的做法,詳情見的意見。

session_start(); 

// 1. unset all of the session variables 
$_SESSION = array(); 

// 2. delete the session cookie 
if (ini_get('session.use_cookies')) { 
    $params = session_get_cookie_params(); 
    setcookie(session_name(), '', (time() - 42000), $params['path'], $params['domain'], $params['secure'], $params['httponly']); 
} 

// 3. destroy the session. 
session_destroy(); 
+0

我試過了,它沒有工作......我不知道它是否可以成爲我的服務器的問題,因爲我到目前爲止嘗試了所有的選項 – ledesma

+0

ive在另一臺服務器託管了該頁面,它確實工作......所以它可能成爲我的服務器的問題..謝謝很多隊友... – ledesma

0

你不必做$_SESSION = array();

只需使用session_destroy()喜歡這裏說: http://www.php.net/manual/fr/function.session-destroy.php

+0

即使我拿出來,它不工作! – ledesma

+0

@ mArm.ch如果您想安全地銷燬會話,則必須手動取消超全球及任何相關的cookie,這也是文檔所說的:_「它不會取消設置與會話相關聯的任何全局變量,也不會取消設置會話cookie。「_ –

+0

哎呀。今天不太好。 –

0

這是一個功能我用它來註銷:

function logout(){ 

    $cookies = explode(';', $_SERVER['HTTP_COOKIE']); 
    foreach($cookies as $cookie) { 
     $parts = explode('=', $cookie); 
     $name = trim($parts[0]); 

     if(strtoupper($name) == 'PHPSESSID'){ 
      continue; 
     } 

     setcookie($name, '', time()-360000); 
     setcookie($name, '', time()-360000, '/'); 
    } 

    foreach($_SESSION as $key => $val){ 
     unset($_SESSION[$key]); 
    } 

    header('Location: account/login'); 
    die; 
}