【发布时间】:2012-08-01 23:44:56
【问题描述】:
对不起,如果这是一个愚蠢的问题,但最近我一直在为客户设计一个网站,但我的会话发生了一些奇怪的事情。
该网站有一个 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 不会影响任何会话,如果会话已经更早启动。
感谢您的任何回答,如果这是一个愚蠢的问题,我再次道歉。
【问题讨论】:
-
orderreview.php是它自己的文件还是包含在其他可能已经调用过session_start()的文件中? -
这是它自己的文件,有一个从 PayPal 直接到 mysiteURL/orderreview.php 的重定向
-
好吧,很奇怪,如果没有 session_start,我根本看不到您如何获得任何会话数据,它不应该可用。
var_dump(session_id());显示什么?如果没有会话开始,它应该是一个空字符串。我唯一能想到的可能是session.auto_start设置启用了?