PHP会话和session_start()

时间:2012-08-03 22:11:43

标签: php session

很抱歉,如果这是一个愚蠢的问题,但最近我一直在为客户设计一个网站,我的会话发生了一些奇怪的事情。

该网站有一个PayPal按钮,可以将用户重定向到PayPal,这样他们就可以确认付款,然后再重定向到该网站。

在重定向用户之前,会保存一大堆会话变量。其中一些与PayPal有关,另一些则与我网站上的内容有关,例如变量以确定登录的用户,购物车项目等。

现在,这里出现了问题......

用户从checkout.php重定向到PayPal。在重定向之前,站点的所有会话变量都存在(由var_dump和print_r显示)。这可以。

用户从PayPal返回到orderreview.php,但var_dump和print_r现在显示缺少站点会话变量,但所有PayPal都存在。

我通过删除“session_start();”解决了这个问题。来自orderreview.php。

的顶部

所以我的问题是,为什么删除该行会解决问题?为什么以前不能用呢?

我以为我理解PHP会话,但显然我并不像我想的那样理解它们。

我在某处读过这篇文章:

“从PHP 4.3.3开始,在会话已经启动时调用session_start()将导致级别为E_NOTICE的错误。此外,第二个会话启动将被忽略。”

所以我假设在脚本顶部调用session_start不会影响任何事情,如果会话已经提前开始。

感谢您的回答,如果这是一个愚蠢的问题,我再次道歉。

1 个答案:

答案 0 :(得分:1)

这可能是因为您在此过程中被重定向到另一个站点。当您从Paypal返回到您的网站时,session_start()生成了一个新的会话ID,您之前存储的会话变量未链接到该会话ID。

当你删除session_start()时(我不认为会话应该在没有这个的情况下工作),它使用旧的会话ID并且永远不会重新生成。因此,旧会话数据又回来了!

这只是我的假设。