1

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

该网站有一个 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 不会影响任何会话,如果会话已经更早启动。

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

4

1 回答 1

1

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

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

这只是我的假设。

于 2012-08-03T22:16:18.847 回答