我在PHP中遇到過這個問題,我從未能夠理解!
我有一個PHP文件下面的代碼:爲什麼`session_destroy()`在PHP中不起作用?
session_start();
$sid = session_id();
session_unset();
session_destroy();
echo $sid;
按道理每次它應該給我不同的會話ID導致時間很明顯,我稱之爲session_destroy()
,但它只是不會終止會話。它總是給我相同的會話ID!
我做錯了嗎?
我在PHP中遇到過這個問題,我從未能夠理解!
我有一個PHP文件下面的代碼:爲什麼`session_destroy()`在PHP中不起作用?
session_start();
$sid = session_id();
session_unset();
session_destroy();
echo $sid;
按道理每次它應該給我不同的會話ID導致時間很明顯,我稱之爲session_destroy()
,但它只是不會終止會話。它總是給我相同的會話ID!
我做錯了嗎?
對我來說,只有下列組合完美的作品,以完全摧毀一個會話:
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;
?>
它的工作的:你試試這個。
這裏也沒什麼區別! – 2012-04-28 07:04:56
添加示例代碼。你試過這個嗎?它完美的作品。 – 2012-04-28 07:10:22
是的,這是完美的作品。謝謝。 – 2012-04-28 07:16:00
請參閱此鏈接。 它說如果指定了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();
}
?>
嗯,只要你得到一個新的_session_,那麼相同的ID就可以。據我記得,你應該。 – 2012-04-28 07:02:45
@JoachimIsaksson嗯,我需要它是不同的,因爲我正在實現一個應用程序,基於他們的會話ID對用戶進行身份驗證,我必須完全控制這些事情。 – 2012-04-28 07:06:57
@Radu,嗯......這是個主意。 – 2012-04-28 07:15:27