PHP在登录/注销时重新生成会话ID不起作用
我很难让PHP在我正在开发的应用程序中工作。该应用程序使用(松散的)自制MVC框架,并通过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
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
我只是想知道如何让session\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数组,以查看您的特定应用程序中发生了什么