2013-10-15 470 views
0

我試圖銷燬點擊登出時的會話,但那不起作用。會話銷燬錯誤

<?php 
session_start(); 
if(isset($_SESSION['user_name'])) 
{ 
    session_destroy(); 
    session_unset();  
    header('Location:Login2.php'); 
} 
else 
{ 
    echo "error"; 
} 
?> 

它進入其他部分意味着顯示錯誤。

+2

然後'$ _SESSION [ 'USER_NAME']'是顯然沒有設置。 – Wrikken

+0

您是否檢查過$ _SESSION ['user_name']'的值? –

+0

@RafaelBarros No..Value $ _SESSION ['user_name']沒有得到.. – user2870941

回答

1

你有很多不需要的代碼。例如,只有當用戶實際登錄時纔會顯示註銷鏈接,因此if-else聲明中沒有任何意義。

它縮短爲:

<?php 

session_start(); 
session_destroy(); 
header('Location:Login2.php'); 

?> 

我的意思是,如果你要在那裏摧毀會議確實是在檢查天氣或沒有用戶沒有點登錄可以說路徑http://yourdomain.com/logout.php導致這個腳本以及如果用戶沒有登錄,他以某種方式訪問​​此路徑沒有真正發生,但如果他登錄你真的不應該關心,如果SESSION變量設置,因爲你要破壞它不管。

+0

你給出的代碼也不起作用。當我點擊後面,它仍然在前一頁。 – user2870941

+0

那麼你定義了header()重定向,所以它會銷燬會話,並且如果你不想重定向,那麼它將把你帶到Login2.php,然後簡單地移除header()函數。至於會議真的沒有什麼不能在那裏工作。 –

0

調用session_destroy()使session_unset()需要重複和不必要的。在header()之後還要撥打die(),否則一切仍然執行並且重定向失敗。

<?php 
session_start(); 
if(isset($_SESSION['user_name'])) 
{ 
    session_destroy(); 
    header('Location: Login2.php'); 
    die(); 
} 
else 
{ 
    echo "error"; 
} 
?> 

有很多冗餘邏輯和代碼仍然所以這裏的最優解是:

logout.php

<?php 
session_start(); 
session_destroy(); 
header('Location: Login2.php'); 
die(); 
?>