有沒有人有任何想法,爲什麼這不起作用?強制要求會話ID
if(isset($_POST['PHPSESSID'])) {
session_id($_POST['PHPSESSID']);
session_start();
var_dump($_SESSION);
}
var_dump($ _ SESSION);永遠是空的!它應該加載的東西!是否有防止強制會話ID的設置?自動啓動未啓用。
有沒有人有任何想法,爲什麼這不起作用?強制要求會話ID
if(isset($_POST['PHPSESSID'])) {
session_id($_POST['PHPSESSID']);
session_start();
var_dump($_SESSION);
}
var_dump($ _ SESSION);永遠是空的!它應該加載的東西!是否有防止強制會話ID的設置?自動啓動未啓用。
您發佈的代碼是正確的。然而,你可能不會看到在您的會話變量的幾個原因:
$_POST['PHPSESSID']
未設置$_POST['PHPSESSID']
包含非數字字符$_POST['PHPSESSID']
並不是指一個人口會話IDsession_start()
呼叫之前,被稱爲以session_id
如果沒有這些應用,我不知道問題是什麼,但爲什麼不嘗試使用session_name()
(這是專爲你想要做的)而不是session_id
?
謝謝。該變量已設置,因爲if(isset())塊中的var_dump正在發生,所以我知道這是返回true。 「非數字」的意思是「非字母數字?」你能解釋如何使用session_name()來做到這一點嗎? – 2010-09-05 15:33:26
http://php.net/manual/en/function.session-name.php – RobertPitt 2010-09-05 15:37:24
我的理解,通過鏈接確認,session_name()是會話cookie的名稱,但session_id()是唯一值。我已經確認session_name()的值是「PHPSESSID」(默認值),因此無論是硬編碼還是使用該函數進行檢索,我都沒有看到它會如何改變? – 2010-09-05 15:40:57
你$_POST['PHPSESSID']
一定是錯誤的:
根據會話處理器,並不是所有字符都會話ID內進行。例如,文件會話處理器只允許字符範圍A-Z A-Z 0-9,(逗號)和 - (負)
檢查其值。如果更改了會話處理程序,則必須僅爲此特定會話處理程序使用允許的字符。
資源:
$ _POST ['PHPSESSID']以「88rbfemtnma9padi34kfm7imk0」的形式出現。 session.save_handler是「文件」這讓我發瘋。我可以確認會話ID存在,因爲在另一個瀏覽器中,我正在執行var_dump(session_id()),它返回通過請求進入的確切值。 – 2010-09-05 15:50:10
你的代碼中的會話是否被破壞? – 2010-09-05 15:58:08
有與會話保存路徑的問題。它沒有正確設置,所以我可以猜測PHP依靠瀏覽器cookie創建會話而不是會話保存路徑中的文件。
你容易受到會話劫持btw。 – RobertPitt 2010-09-05 15:31:51
@RobertPitt:請詳細說明 – VolkerK 2010-09-05 17:45:34
,如果我從另一位會員那裏得到session_id,我可以通過POST注入並使用另一個成員的會話,訪問我不應該能夠訪問的數據! – RobertPitt 2010-09-05 18:28:56