为什么我的PHP会话正在消亡?为什么';我不能恢复它们吗?

为什么我的PHP会话正在消亡?为什么';我不能恢复它们吗?,php,session,paypal,Php,Session,Paypal,我有一个应用程序使用PHP和贝宝API。它获得付款的基本方式是,您向PayPal进行web服务调用以获取令牌,然后使用该令牌在浏览器中重定向到PayPal以供用户付款。确认付款详细信息后,PayPal将重定向回您最初在服务呼叫中设置的URL 这一切都很有效,每天都有数百万人使用它,等等 奇怪的是,当PayPal重定向回来时,PHP会话就消失了。这是一个好主意 第一个问题:为什么会发生这种情况?两个页面都在同一个域中,都使用HTTPS。会话适用于所有请求,直到PayPal重定向回 链接的论坛线程建

我有一个应用程序使用PHP和贝宝API。它获得付款的基本方式是,您向PayPal进行web服务调用以获取令牌,然后使用该令牌在浏览器中重定向到PayPal以供用户付款。确认付款详细信息后,PayPal将重定向回您最初在服务呼叫中设置的URL

这一切都很有效,每天都有数百万人使用它,等等

奇怪的是,当PayPal重定向回来时,PHP会话就消失了。这是一个好主意

第一个问题:为什么会发生这种情况?两个页面都在同一个域中,都使用HTTPS。会话适用于所有请求,直到PayPal重定向回

链接的论坛线程建议了一种解决方法,在PayPal请求中保留会话ID,然后稍后检索并恢复会话。太好了,不过好像不起作用

我可以添加一些日志语句:

log(session_id());
在各种重定向之前和之后。当我从贝宝回来的时候,我记录了更多

log("session id is " . session_id());
$session_id = get_session_id_from_paypal();
log("setting it back to " . $session_id);
session_id($session_id);
session_start();
log("session id is now " . session_id());
结果完全不是我所期望的:

会话\u id
是fc8f459a186a3f4695ff9ac71b563825
将其设置回82460dcf8c8ddd538466e7cb89712e72
会话id
现在是360ba3fd99d233e0735397278d2b2e55

第二个问题:为什么会话id根本不是我设置的?我做错了什么?或者,至少,为什么会话变量都没有返回?

你能做一个phpinfo()并判断session.auto\u start是否为真吗?

只是一个想法

您是否已将
会话。参考检查设置为您的主机?
默认值为空字符串,但可能已更改。。。当页面从PayPal“返回”时,php将丢弃会话信息


您可以使用phpinfo()检查
会话。referer\u check

我知道,但是如果您的服务器配置为auto\u start=True,则会话会在每个页面上自动启动。因此,您对session\u id($session\u id)的调用将不起作用,因为此调用必须在session\u start调用之前。如果auto_start=true,那么它已经启动了。叮叮!这就是为什么我的PHP会话正在消亡。哈哈,很高兴你把它理顺了。