当PayPal返回IPN时,我需要取消设置会话变量。
最简单的脚本如下
<?php
session_start();
unset($_SESSION['my_item']);
?>
Paypal发送IPN,一切正常,但在请求后我的会话变量保存了它的值。
可能有什么问题?
由于
更新
如上所述,当ipn发送请求时,它已经是另一个会话,所以我可以执行以下操作。
在将用户发送到paypal之前,请将自定义变量设置为当前
SESSION_ID();
当paypal发送ipn时,我可以将当前会话更改为previus会话,并清除它。
session_id($_POST[custom]);
session_start();
session_destroy(); //works fine
答案 0 :(得分:3)
此处的问题是IPN通知与正确的会话无关。
IPN实际上是一个新会话 - 它不会提供与客户端相同的会话cookie,因为您尚未设置它们。会话对于客户来说是唯一的,而paypal网关是与您的用户不同的客户端。
您需要通过数据库退回此信息。没有明智,简单的方法让IPN接收器直接修改用户的会话数据。
答案 1 :(得分:1)
您应该检查特定的帖子变量。即使只是一个空数组,也总会设置$ _POST。
<?php
session_start();
if(isset($_POST['name'])) {
unset($_SESSION['my_item']);
}
?>
答案 2 :(得分:1)
我已经写了这个更新,但是如果我把解决方案作为答案写的话,那就更好了。
如果我将session_id发送给paypal,当它返回时,我可以将当前会话设置为它的vallue,并将其删除。
session_id($_POST[custom]); //$_POST[custom] is user's session id
session_start();
session_destroy();
答案 3 :(得分:0)
您的条件是:
if(isset($_POST['ipn'])){
...do something
}
然后这应该有效:
if(isset($_POST['ipn'])){
unset($_SESSION['my_item']);
}