我目前正在使用Paypal REST API为有多个计划的用户处理账单协议。
当用户注册一个计划时,他们会去PayPal付款。在他们完成该步骤后,PayPal将他们重定向到我提供的返回URL。
问题是,有时当用户从PayPal返回时,他们的会话不会持续!
我将session_start()
作为所有文件的第一行,因此正在创建会话。在将用户带到PayPal之前,我已经验证了$_SESSION
数组正在填充——这只是在PayPal之后将其带回时。
有没有更好的方法来保存这样的数据,这样我就可以在从PayPal返回时更新用户帐户?或者有一种方法可以通过PayPal请求传递电子邮件,以便在返回时将其返回到他们发送回我网站的对象中?
如果您在注册页面和PayPal重定向回的页面上都通过session_start()
正确启动了会话,则您的会话应该正确启动。
假设你没有无意中关闭会话或重新生成ID,听起来并没有真正的"会话管理"问题,但也许这与PayPal重定向回的URL有关。
PHP会话的一个常见问题是,使用默认的PHP配置,它们不会在子域之间传输。
例如,如果我在example.com
访问您的域,则我的会话将仅在example.com
上处于活动状态。如果我转到www.example.com
,我将收到一个新的会话。
您可以通过访问位于example.com
或www.example.com
的站点并检查PHPSESSID
cookie设置为哪个域来验证这一点。如果是而不是.example.com
(注意前面的.
),则这就是问题=]
为了帮助解决此问题,您可以修改服务器的配置,将.example.com
设置为cookie的域。取自这个答案:
session.cookie_domain = ".example.com"
我对最近的一个问题给出的答案也应该在这里起作用:
我对这个问题的解决方案是
override_merchant_preferences
与查询中包含用户id的return_url
,如www.domain.com/api/handler.php?uid=42&action=return
。
当然,您可以通过这种方式通过$_GET
传递任何想要的标识符。