我无法让 PHPsession_regenerate_id()在我正在开发的应用程序中工作。该应用程序使用(松散的)自制 MVC 框架并通过文件重定向所有请求。.htaccessindex.php
我正在尝试在注销时重新生成会话 ID,但它无法正常工作。
这是我的注销控制器中的一些代码 - 过期变量是对会话超时的检查:
session_regenerate_id(true);
if(isset($_SESSION['expired']))
{
$this->registry->template->expired = true;
}
session_unset();
session_destroy();
Run Code Online (Sandbox Code Playgroud)
同样相关的是 index.php 文件开头的代码:
session_cache_expire(20);
session_start();
session_name("TMU");
//session_regenerate_id();
Run Code Online (Sandbox Code Playgroud)
我正在回显session_id()每个页面底部的结果,以查看它包含的内容以测试它是否已重新生成。
但是,当您注销时,会话 ID 不会更改。当您再次登录(即使使用另一个帐户)时,会话 ID 是相同的。
您会注意到 index.php 文件的第四行注释掉了 - 如果我取消注释该行,ID 似乎在每个页面上都按原样重新生成。但是,当我再次注释掉该行时,会话 ID 再次是我在索引文件中取消注释该行之前的原始 ID...
我只是想知道如何让 session_regenerate_id()工作。似乎只是没有“提交”更改后的 ID。我试过使用,session_commit()但我不明白它是如何完全工作的,当我试图破坏会话时它给了我一个错误。
PHP 5.3.10 和 Apache 2.2.21