小编Aus*_*ron的帖子

PHP在登录/退出时重新生成会话ID不起作用

我无法让 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

php security session sessionid

3
推荐指数
1
解决办法
5521
查看次数

标签 统计

php ×1

security ×1

session ×1

sessionid ×1