2011-09-10 78 views
2

我是學習Php的新手。我創建了以下代碼。PHP會話破壞後存在

<?php 
/* 
* Testing Sessions with PHP 
*/ 
session_start(); 
$_SESSION['user_id'] = 'Testing User'; 
session_destroy(); 
?> 

<html> 
<head> 
    <title> Sessions Page</title> 
</head> 
<body> 
    <?php 
     echo $_SESSION['user_id']; 
    ?> 
</body> 
</html> 

現在回聲$ _SESSION [ 'user_ID的']回聲測試用戶。在我看來,它不應該,因爲我已經破壞了會議。是什麼原因?

回答

2

您需要取消設置會話變量。 請參閱http://php.net/manual/de/function.session-unset.php

意味着,在銷燬會話之前放置session_unset()。

+0

太棒了!它的工作,但session_unset()和session_destroy()之間有什麼區別? –

+1

@back http://stackoverflow.com/questions/4303311/what-is-the-difference-between-session-unset-and-session-destroy-in-php – NullUserException

+0

這個問題依然存在於我的腦海裏。當會話被破壞時爲什麼會話變量存在。至少對我而言,這並沒有連接到邏輯。請詳細說明您是否可以。 –

1

這似乎是(無論出於何種原因)的設計。正確的方式去做你想做的事。

session_start(); 
$_SESSION['user_id'] = 'Testing User'; 
session_unset(); 
session_destroy(); 

此代碼將從$_SESSION中刪除所有會話變量,然後銷燬會話。

2

函數session_destroy()確實會破壞你的會話。會話在這種情況下是服務器上的文件(或數據庫),用於保存您的數據。這意味着您以後無法在其他頁面上訪問此會話。

globale $ _SESSION []變量是一個不同的故事。在頁面上的代碼開始處理之前,它將從會話文件中填充。因此,它會保留數據的副本並保留在內存中,直到頁面處理完畢。你可以用session_unset()清除這個變量,但是也可以等到頁面結束並且所有的變量都被銷燬。

+0

@ S.A.Malik爲什麼這不是正確答案? – evilReiko