2012-04-28 73 views
1

我在PHP中遇到過這個問題,我從未能夠理解!
我有一個PHP文件下面的代碼:爲什麼`session_destroy()`在PHP中不起作用?

session_start(); 
$sid = session_id(); 
session_unset(); 
session_destroy(); 
echo $sid; 

按道理每次它應該給我不同的會話ID導致時間很明顯,我稱之爲session_destroy(),但它只是不會終止會話。它總是給我相同的會話ID!
我做錯了嗎?

+0

嗯,只要你得到一個新的_session_,那麼相同的ID就可以。據我記得,你應該。 – 2012-04-28 07:02:45

+0

@JoachimIsaksson嗯,我需要它是不同的,因爲我正在實現一個應用程序,基於他們的會話ID對用戶進行身份驗證,我必須完全控制這些事情。 – 2012-04-28 07:06:57

+0

@Radu,嗯......這是個主意。 – 2012-04-28 07:15:27

回答

4

對我來說,只有下列組合完美的作品,以完全摧毀一個會話:

session_destroy(); 
session_unset(); 
session_regenerate_id(true); 

編輯:完美

<?php 
session_start(); 
$sid = session_id(); 
echo $sid; 
echo "<br />"; 

//destroy session 
session_destroy(); 
session_unset(); 

//now start the new session 
session_start(); 
session_regenerate_id(true); 
$sid = session_id(); 
echo $sid; 
?> 

它的工作的:你試試這個。

+0

這裏也沒什麼區別! – 2012-04-28 07:04:56

+0

添加示例代碼。你試過這個嗎?它完美的作品。 – 2012-04-28 07:10:22

+0

是的,這是完美的作品。謝謝。 – 2012-04-28 07:16:00

2

seesion_id() concept

請參閱此鏈接。 它說如果指定了id,它會替換當前的會話ID。 session_id()需要在session_start()之前調用

中有這樣的例子指出,

自PHP 4.3.3你得到一個通知,當你兩次啓動一個會話。您可以使用session_id()來檢測會話是否已經啓動。在創建腳本之前,必須知道session_id()在沒有會話標識已知時返回false。所以現在我們可以讓一個腳本女巫檢測一個會話是否開始,如果不是,它會開始一個會話。

This is what you get then: 
<?php 
if(!session_id()){ 
session_start(); 
} 
?> 
相關問題