WAMP上session_start、session_name和session_set_cookie_params的顺序


Order of session_start, session_name, and session_set_cookie_params on WAMP

我的开发机器上周在工作中坏了,我正在重新设置它。我的前任让zend服务器在windows上运行,我在设置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移动到该块的顶部似乎是可行的。我的会话在开发服务器(wamp)和测试服务器(lamp)上的页面负载之间持续存在。

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

所以我翻了翻手册页,session_name页面上写着:

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

所以看起来session_start应该像最初一样结束代码块。但WAMP似乎不喜欢这样。

WAMP的这种行为不规范吗?如何让我的开发服务器像我的生产服务器一样工作?

修复了这个问题,发现WAMP在会话cookie的生存期设置为0时无法正常工作。session_set_cookie_params()的手册页显示:

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

默认值为零使我在每次页面加载时生成一个全新的会话id,而不是一直保持到浏览器关闭。将cookie生存期设置为24小时是WAMP的有效解决方法。