Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP在登录/注销时重新生成会话ID不起作用_Php_Security_Session_Sessionid - Fatal编程技术网

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

PHP在登录/注销时重新生成会话ID不起作用,php,security,session,sessionid,Php,Security,Session,Sessionid,我很难让PHP在我正在开发的应用程序中工作。该应用程序使用(松散的)自制MVC框架,并通过index.php文件使用.htaccess重定向所有请求 我试图在注销时重新生成会话ID,但它无法正常工作 以下是我的注销控制器中的一些代码-过期变量用于检查会话超时: session_regenerate_id(true); if(isset($_SESSION['expired'])) { $this->registry->templ

我很难让PHP在我正在开发的应用程序中工作。该应用程序使用(松散的)自制MVC框架,并通过
index.php
文件使用
.htaccess
重定向所有请求

我试图在注销时重新生成会话ID,但它无法正常工作

以下是我的注销控制器中的一些代码-过期变量用于检查会话超时:

    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\u id()

但是,当您注销时,会话ID不会更改。再次登录时(即使使用其他帐户),会话ID也相同

您会注意到index.php文件中注释掉的第四行——如果我取消注释该行,则每个页面上的ID都会按原样重新生成。但是,当我再次注释该行时,会话ID再次是我在索引文件中取消注释该行之前的原始ID

我只是想知道如何让s
ession\u regenerate\u id()
工作。似乎只是没有“提交”更改的id。我尝试过使用
session\u commit()
,但我不明白它是如何工作的,并且在我尝试销毁会话时,它给了我一个错误


PHP5.3.10和Apache2.2.21

在多次重温这个主题之后,我已经找到了答案。有两个问题

  • 在显示任何HTML输出和/或发送标题之前,必须调用会话重新生成id()。(它需要作为第一个函数之一调用,就像
    session\u start()
  • 秩序很重要
    session\u name(“TMU”)
    需要在
    session\u start()
    之前调用,才能获得所需的结果-我以前没有捕捉到这一点
  • 基本上,发生在我身上的事情是在
    session\u start()
    之后调用
    session\u name(“TMU”)
    导致它设置两个会话ID cookies-两个会话-一个命名为TMU,另一个只是默认的PHPSESSID。更改顺序修复了我的所有问题,并重新生成ID/销毁旧会话,现在一切正常

    对于在执行此操作时遇到问题的任何人,我建议您回显$\u会话和$\u COOKIE数组,以查看您的特定应用程序中发生了什么