Php WAMP上会话开始、会话名称和会话设置参数的顺序

Php WAMP上会话开始、会话名称和会话设置参数的顺序,php,session,wamp,Php,Session,Wamp,我的开发机器上周在工作时坏了,我正在重新安装。我的前任在windows上运行zend服务器,我在设置WAMP备份时使用了它。我们的生产服务器是linux 我检查了SVN的代码库,并将其全部设置好,结果发现会话不起作用。在zend和linux上工作的原始会话代码如下所示: $CookieConf = session_get_cookie_params(); $CookieConf["secure"] = true; $CookieConf["httponly"] = true; session

我的开发机器上周在工作时坏了,我正在重新安装。我的前任在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\u start应该在其他session方法之前被调用,而且将session\u start移动到块的顶部似乎是可行的。我的会话在dev服务器(wamp)和测试服务器(lamp)上的页面负载上保持不变

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

因此,我深入到手册页中,其中的会话名称页显示:

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

因此,session_start应该像最初一样结束这段代码。但WAMP似乎不喜欢这样


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

修复了这个问题,结果是WAMP在会话cookie的生存期设置为0时无法正常工作。会话_set _cookie _params()的手册页如下:

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


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

这似乎有些奇怪,我怀疑生产环境和开发环境之间存在配置差异。我会比较PHP和Apache的两个版本,然后还比较PHP.ini文件(或phpinfo()页面)中所有与会话相关的变量,以寻找线索。感谢您的建议,我降级了我的开发服务器,直到它与我的live server匹配,但它没有解决问题。事实证明,这与会话cookie的生命周期有关,是WAMP的非标准行为。