WAMP上的session_start,session_name和session_set_cookie_params的顺序

时间:2015-04-06 22:51:58

标签: php session wamp

我的开发机器在上周开始工作了,我只是让它恢复正常。我的前任曾在Windows上运行过zend服务器,因为我正在设置它,所以我选择了WAMP。我们的生产服务器是linux。

我从SVN检查了代码库并完成了所有设置,但却发现会话无法正常工作。在zend和linux上工作的原始会话代码如下所示:

$CookieConf = session_get_cookie_params();
$CookieConf["secure"]   = true;
$CookieConf["httponly"] = true;
session_set_cookie_params
(
    $CookieConf["lifetime"],
    $CookieConf["path"],
    $CookieConf["domain"],
    $CookieConf["secure"],
    $CookieConf["httponly"] 
);
session_name('Redacted');
session_start();

一些谷歌搜索让我相信应该在其他会话方法之前调用session_start,并确定将session_start移动到该块的顶部似乎有效。我的会话在dev服务器(wamp)和测试服务器(lamp)上持续跨页加载。

直到我开始找到不起作用的特定功能。特别是在登录页面上,我发现登录成功后,它会重定向到帐户页面,但会话数据在两者之间丢失。现在,帐户页面认为您未登录并将您返回登录页面。这真是奇怪,因为我无法复制问题,似乎能够在保存会话数据的同时将其他页面中的精细重定向到帐户页面,只是这个特定的重定向无效。

所以我挖到了session_name页面所说的手册页:

  

因此,您需要为每个请求调用session_name()(并且在调用session_start()或session_register()之前)。

所以看起来session_start应该像它首先那样结束那段代码。但WAMP似乎并不喜欢这样。

这是WAMP部分的非标准行为吗?如何让我的开发服务器像我的生产服务器一样工作?

1 个答案:

答案 0 :(得分:1)

修复了问题,结果是WAMP无法正常运行,会话cookie的生命周期设置为0. session_set_cookie_params()的手册页内容为:

  

session.cookie_lifetime指定发送到浏览器的cookie的生命周期(以秒为单位)。值0表示“直到浏览器关闭”。默认为0.

默认值为0使我在每个页面加载上生成一个全新的会话ID,而不是在浏览器关闭之前保持不变。将Cookie生命周期设置为24小时是WAMP的有效解决方法。