[英]PHP $_SESSION works on WAMP but not on my Server with exact same code, why?
[英]why is php generating the same session ids everytime in test environment (WAMP)?
我已經在我的系統中配置了wamp,並且正在本地環境中進行開發和測試。 我正在研究注銷功能,並且碰巧注意到生成的會話ID在瀏覽器中是相同的。
例如 - 即使在注銷並登錄后,chrome也會為所有用戶生成會話ID = abc; IE總是為所有用戶生成session id = xyz。
這是wamp /我的測試環境的問題嗎?
請在下面找到我的注銷php腳本 -
<?php
session_start();
$sessionid = session_id();
echo $sessionid;
session_unset();
session_destroy();
?>
您可能仍然擁有包含舊會話ID的cookie,因為session_unset
和session_destroy
都沒有刪除該cookie:
為了完全終止會話,比如要將用戶注銷,還必須取消設置會話ID。 如果使用cookie來傳播會話ID(默認行為),則必須刪除會話cookie。
setcookie()
可能會用於此。
因此,在注銷后使用setcookie
使會話ID 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"]
);
}
另一個建議是使用session_regenerate_id(true)
在成功驗證后重新生成會話ID。
將工作。 請試試這個
session_start();
session_regenerate_id(TRUE);
session_destroy();
您必須使用函數session_regenerate_id()
重新生成會話ID。 沒有它,會話ID在頁面刷新之間是相同的。
session_destroy()銷毀與當前會話關聯的所有數據。 它不會取消設置與會話關聯的任何全局變量,也不會取消設置會話cookie。 要再次使用會話變量,必須調用session_start()。
為了完全終止會話,比如要將用戶注銷,還必須取消設置會話ID。 如果使用cookie來傳播會話ID(默認行為),則必須刪除會話cookie。 setcookie()可能會用於此。
session_unset()
和session_destroy()
不會刪除會話cookie。 您必須使用setcookie()
調用手動取消設置它。
session_unset與session_register()
相反,session_destroy只是清除$ _SESSION而不影響cookie。
從手冊 (session_destroy):
session_destroy()銷毀與當前會話關聯的所有數據。 它不會取消設置與會話關聯的任何全局變量,也不會取消設置會話cookie。 要再次使用會話變量,必須調用session_start()。
為了完全終止會話,比如要將用戶注銷,還必須取消設置會話ID。 如果使用cookie來傳播會話ID(默認行為),則必須刪除會話cookie。 setcookie()可能會用於此。
除非您專門取消設置cookie,否則cookie仍然存在,並且下次調用session_start()時,它將使用它作為會話ID。 關閉瀏覽器也應該清除cookie,因為它們通常由php設置為在瀏覽器關閉時到期。
要停止會話劫持,請按照PHP中的以下代碼進行操作
session_start();
/* to stop session hijacking */
// Generate new session without destroying the old one
session_regenerate_id(false);
// Fetch current session ID and close both sessions to allow other scripts to use them
$newSession = session_id();
session_write_close();
// Assign session ID to the new one, and start it back up again
session_id($newSession);
session_start();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.