[英]PHP Regenerating session ID on login / out not working
我無法讓 PHP 的session_regenerate_id()
在我正在開發的應用程序中工作。 該應用程序使用(松散的)自制 MVC 框架,並通過index.php
文件使用.htaccess
重定向所有請求。
我正在嘗試在注銷時重新生成 session ID,但它無法正常工作。
這是我注銷 controller 中的一些代碼 - expired 變量是對 session 超時的檢查:
session_regenerate_id(true);
if(isset($_SESSION['expired']))
{
$this->registry->template->expired = true;
}
session_unset();
session_destroy();
同樣相關的是 index.php 文件開頭的代碼:
session_cache_expire(20);
session_start();
session_name("TMU");
//session_regenerate_id();
我在每個頁面的底部回顯session_id()
的結果,以查看它包含的內容以測試它是否已重新生成。
但是,當您注銷時,session ID 不會更改。 當您再次登錄時(即使使用另一個帳戶),session ID 是相同的。
您會注意到 index.php 文件中被注釋掉的第四行 - 如果我取消注釋該行,則 ID 似乎會在每個頁面上重新生成。 但是,當我再次注釋掉該行時,session ID 再次成為我在索引文件中取消注釋該行之前的原始 ID...
我只是想知道如何讓ession_regenerate_id()
工作。 似乎它只是沒有“提交”更改后的 ID。 我試過使用session_commit()
但我不明白它是如何完全工作的,當我試圖銷毀 session 時它給我一個錯誤。
PHP 5.3.10 和 apache 2.2.21
在多次重溫這個話題之后,我已經弄明白了。 有兩個問題。
session_regenerate_id()
。 (它需要作為第一個函數調用,就像session_start()
一樣)。session_start()
之前調用session_name("TMU")
以獲得所需的結果——我之前沒有注意到這一點。 基本上發生在我身上的是在session_start()
導致它設置兩個 session ID cookies 之后調用session_name("TMU")
- 兩個會話 - 一個名為 TMU,另一個只是默認的 PHPSESSID。 更改順序解決了我所有的問題並重新生成 ID/銷毀舊的 session 現在按預期工作。
對於執行此操作時遇到問題的任何人,我建議您回顯 $_SESSION 和 $_COOKIE arrays 以查看您的特定應用程序中發生了什么。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.