2012-07-26 38 views
0

我在阅读了很多关于会话安全性的在线文章后写了一个PHP登录脚本。但是,我遇到了会话信息在页面之间不一致的问题。可能有一种行为与我使用的我忽略的方法之一有关,但我不完全是PHP或会话专家。在那里我有问题的代码是在被称为在每一页的head会话启动功能:为什么我的PHP会话保持清除状态?

//Setup the session 
session_name('CPI_SESSION'); 
session_set_cookie_params(0, '/', $_SERVER['SERVER_NAME'], (isset($_SERVER['HTTPS']) ? $_SERVER['HTTPS'] : true), true); 
//Start the session 
session_start(); 

print_r($_SESSION); 
echo '<br/>'; 
if(!isset($_SESSION['session_init'])) 
{ 
    session_regenerate_id(true); 
    $_SESSION['session_init'] = true; 

    print_r($_SESSION); 
} 

我使用的方法,我读到here。我唯一修改的是session_regenerate_id删除旧会话,这是我想要的行为。但是,我得到意想不到的结果。分别

阵列()
阵列([session_init] => 1)

从每个print_r:所述echo我得到看起来像这样。所以每次调用该函数时,出于某种原因,我的知识都不清楚会话是空的,会导致它重新生成id并清除已经空的会话,然后设置session_init。如果我刷新页面,session_init仍应保存,但事实并非如此。这导致它再次做同样的事情。为什么是这样?我试过注释掉session_namesession_set_cookie_params,但它没有什么区别。

我在本地运行Apache 2.2服务器和PHP 5.3。

+0

为什么要做'session_regenerate_id()'?至于PHP文档,这将“用新文件替换当前会话ID”。 – feeela 2012-07-26 17:03:20

+1

你忘了句子的第二部分:'会用新的会话ID替换当前的会话ID,并保留当前的会话信息。' – alfasin 2012-07-26 17:17:19

+0

我想摆脱它,所以任何拥有会话ID的人都必须得到它再次(如果黑客猜测它,或从客户端窃取它们,他们将不得不再次这样做,客户端将不得不再次登录)。我一直无法测试它,因为这不起作用... – smoth190 2012-07-29 22:11:18

回答

1

这似乎是会话的整个生命周期的问题。 [session_set_cookie_params](http://www.php.net/manual/en/function.session-set-cookie-params.php)将会话持续的秒数作为第一个参数。在您的代码中,它被设置为0.尝试将它更改为更高的数字。

<?php 
//Setup the session 
session_name('CPI_SESSION'); 
// set session time to 4 hours 
session_set_cookie_params(3600*4, '/', $_SERVER['SERVER_NAME'], (isset($_SERVER['HTTPS']) ? true : false), true);  
//Start the session 
session_start(); 

print_r($_SESSION); 
echo '<br/>'; 
if(!isset($_SESSION['session_init'])) 
{ 
    session_regenerate_id(true); 
    $_SESSION['session_init'] = true; 

    print_r($_SESSION); 
} 
?> 
+0

哇,现在我觉得有点愚蠢。没想到当我检查文档来检查参数时......不幸的是,改变它并不能解决它。 – smoth190 2012-07-29 22:11:33

+0

哦,我看到你还有另一个不正确的参数。更改了代码。安全参数只应该是真或假 – 2012-07-30 00:16:15

+0

哦,我没有注意到这一点。但是,问题在于给会话命名。当我删除通话时,它就起作用了(尽管之前删除它并没有解决问题)。不过,我不知道为什么。这可能是我之前改变的,我可能永远不会弄清楚为什么。尽管如此,你的答案解决了一些可能存在的问题,所以这对我来说足够好了。 – smoth190 2012-07-30 00:34:48