Php 当会话id已知但无法启动会话时删除会话变量

Php 当会话id已知但无法启动会话时删除会话变量,php,session,paypal,cart,paypal-ipn,Php,Session,Paypal,Cart,Paypal Ipn,在处理paypal和ipn时,我尝试删除一些会话变量的方式有问题。具体来说,我希望有人登录(或不登录)我的在线零售商店,通过我的购物车,重定向到paypal进行支付,然后重定向到我的网站 我一直在使用paypal ipn让paypal在付款完成时通知我,我可以引导用户返回我的站点,在那里可以再次启动会话,但我希望能够在付款完成后立即取消购物车(但不是整个会话,如果他们登录的话)。这将涵盖我的基础,以防用户没有回到我的网站上的支付完成页面,但回到了另一个页面上的网站 问题是,尽管我在前往paypa

在处理paypal和ipn时,我尝试删除一些会话变量的方式有问题。具体来说,我希望有人登录(或不登录)我的在线零售商店,通过我的购物车,重定向到paypal进行支付,然后重定向到我的网站

我一直在使用paypal ipn让paypal在付款完成时通知我,我可以引导用户返回我的站点,在那里可以再次启动会话,但我希望能够在付款完成后立即取消购物车(但不是整个会话,如果他们登录的话)。这将涵盖我的基础,以防用户没有回到我的网站上的支付完成页面,但回到了另一个页面上的网站

问题是,尽管我在前往paypal之前在我网站上的最后一个shipping info页面上获得了相同的会话id,并且在付款完成后从paypal返回到我网站上的登录页面,但我无法在我的ipn脚本中访问此会话,该脚本在我的网站上运行以响应paypal。我在这三个页面上都运行session_start(),但当我在shipping method页面和payment complete登录页面上发送电子邮件或帖子时,我会得到相同的会话id。当我在ipn脚本中向自己发送会话id的结果时,我什么也得不到

我可以在去贝宝之前杀掉购物车,但如果他们想回去换东西呢?我可以在登录页面上杀死购物车,但是如果他们不知何故进入另一个页面呢?我真的很想摧毁购物车,但不是整个会话的权利,当我得到付款确认,但我不知道如何。我已经在我的ipn页面上尝试过:

session_start();

$a = session_id();

mail("webmaster@mysite.com", "ipn session id 0", $a, "From: webmaster@mysite.com");

//results in blank email, unlike in other locations on actual displayed pages

// Unset all of the session variables.

$_SESSION = array();

// Delete the session cookie to kill the session

if (isset($_COOKIE[session_name()])) {

setcookie(session_name(), '', time()-42000, '/');

}

// Finally, destroy the session.

session_destroy();

unset($_SESSION['cart']);

unset($_SESSION['product_id_array']);

unset($_SESSION['pp_checkout_btn']);

unset($_SESSION['state']);

unset($_SESSION['total']);

unset($_SESSION['shipping']);

unset($_SESSION['grand_total']);

但当我回到查看购物车页面时,它仍然在那里。任何想法都将不胜感激。任何更具体的代码都会有帮助,让我知道,我会发布它。

Paypal IPN呼叫是由Paypal进行的,仅限于服务器对服务器。你也不知道IPN电话什么时候来。通常它们发生在几秒钟之内,但它们可能会晚得多。如果IPN呼叫失败,他们将重试一段时间。您不能在IPN中执行任何与用户会话相关的操作。每个用户都有自己的会话,您不能编辑其他用户的会话。在这种情况下,您的用户有一个会话,而Paypal(IPN调用)获得自己的会话


成功付款后,您必须在返回站点时清除会话变量。这并不是万无一失的——有可能购物车仍然无法清理,但这几乎是唯一的方法。

这就是我所想的情况,你的陈述方式现在在我的脑海中更有意义。这将是一个与paypal而不是用户的对话,这一想法真正让它在我脑海中闪现。因此,即使我可以从此会话访问另一个会话的会话id,也无法从此会话中终止另一个会话,对吗?我会这样假设,因为会话涉及存储在原始会话机器用户上的cookie。太糟糕了,但我想这应该行得通。我只是想要一些更简单的东西。谢谢如果你曾经转换到Paypal Pro(或任何其他你在自己的网站上收集信用卡信息的处理器),你将能够做更多你想做的事情。有了这个系统,你就可以用用户的信用卡信息打电话给Paypal,无论授权与否,他们都会立即给你回复。