我无法让 PHPsession_regenerate_id()
在我正在开发的应用程序中工作。该应用程序使用(松散的)自制 MVC 框架并使用通过文件重定向所有请求。.htaccess
index.php
我正在尝试在注销时重新生成会话 ID,但它无法正常工作。
这是我的注销控制器中的一些代码 - expired 变量是对会话超时的检查:
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()
每个页面的底部回显结果,以查看它包含的内容以测试它是否已重新生成。
但是,当您注销时会话 ID 不会更改。当您再次登录时(即使使用另一个帐户),会话 ID 也是相同的。
您会注意到 index.php 文件的注释掉的第四行 - 如果我取消注释该行,ID 似乎会在每个页面上重新生成。但是,当我再次注释掉该行时,会话 ID 再次是我在索引文件中取消注释该行之前的原始 ID...
我只是想知道我怎样才能让 session_regenerate_id()
工作。似乎它只是没有“提交”更改后的 ID。我试过使用session_commit()
,但我不明白它是如何完全工作的,当我试图破坏会话时它给了我一个错误。
PHP 5.3.10 和 Apache 2.2.21