0

当 PayPal 返回 IPN 时,我需要取消设置会话变量。

最简单的脚本如下

<?php
session_start();
unset($_SESSION['my_item']);
?>

Paypal 发送 IPN,一切正常,但在请求我的会话变量后保存它的值。

有什么问题?

谢谢

更新

如前所述,当 ipn 发送请求时,它已经是另一个会话,所以我可以执行以下操作。

在将用户发送到贝宝之前,将自定义变量设置为当前

session_id();

当贝宝发送 ipn 时,我可以将当​​前会话更改为上一个会话,并将其清除。

session_id($_POST[custom]); 
session_start(); 
session_destroy(); //works fine
4

4 回答 4

3

这里的问题是 IPN 通知与正确的会话没有关联。

IPN 实际上是一个新会话 - 它不会显示与您的客户端相同的会话 cookie,因为您没有设置它们。会话对客户端来说是唯一的,而贝宝网关是与您的用户不同的客户端。

您将需要通过数据库反弹此信息。让 IPN 接收者直接修改用户的会话数据没有明智、简单的方法。

于 2012-01-27T14:09:50.687 回答
1

我已经写了更新,但如果我写解决方案作为答案,它将是击球手。

如果我将 session_id 发送到 paypal,当它返回时,我可以将当​​前会话设置为它的值,然后将其删除。

session_id($_POST[custom]); //$_POST[custom] is user's session id
session_start(); 
session_destroy();
于 2012-01-27T14:34:42.013 回答
1

您应该检查特定的 post 变量。$_POST 将始终设置,即使只是一个空数组。

<?php
session_start();
if(isset($_POST['name'])) {
    unset($_SESSION['my_item']);
}
?>
于 2012-01-27T14:06:46.413 回答
0

你的条件应该是:

if(isset($_POST['ipn'])){
  ...do something
}

那么这应该工作:

if(isset($_POST['ipn'])){
  unset($_SESSION['my_item']);
}
于 2012-01-27T14:05:57.693 回答