2011-05-19 87 views
0

我遇到了问题,我试图删除某些会话变量时处理paypal和ipn.specifically,我想有人登录(或不)在我的网上零售店,通过我的购物车,重定向到paypal付款,然后重定向到我的网站。当会话ID已知但无法启动会话时删除会话变量

我一直在使用paypal ipn获得paypal通知我付款完成时,我可以引导用户回到我的网站,届时可以重新开始,但我希望能够取消设置购物车(但是在他们登录的情况下不是整个会话)一旦付款完成。这将覆盖我的基地,以防止用户在我网站上的付款完成页面上退回,但在不同页面上返回网站。

问题是,尽管我在去PayPal之前在我的网站的最后一个送货信息页上获得了相同的会话ID,并且在付款完成后我从PayPal回到了我的网站上的着陆页,但我无法访问此会话在我的ipn脚本运行在我的网站作为对paypal的回应。我在这三个页面上运行session_start(),但是当我在发货方法页面上发送电子邮件或发布信息并且付款完成登录页面时,我获得了相同的会话ID。当我将自己的会话ID结果发送给我的ipn脚本时,我什么也没得到。

我可以在去paypal之前杀死购物车,但是如果他们想要回去改变东西呢?我可以在着陆页上杀死购物车,但是如果他们以某种方式进入不同的页面呢?我真的想摧毁购物车,但不是整个会议的权利,当我得到付款确认,但我不知道如何。我试过这个在我的ipn页面上:

session_start(); 

$a = session_id(); 

mail("[email protected]", "ipn session id 0", $a, "From: [email protected]"); 

//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']); 

但是当我回到视图购物车页面时,它仍然存在。任何想法将不胜感激。任何更具体的代码,将帮助,让我知道,我会张贴它。

回答

1

贝宝IPN呼叫由PayPal进行,仅服务器到服务器。您也不知道何时该IPN呼叫即将到来。通常他们会在几秒钟内发生,但他们可能晚得多。如果IPN呼叫失败,他们将再次尝试一段时间。您无法执行与IPN中的用户会话相关的任何操作。每个用户都拥有自己的会话,并且不能编辑其他人的会话。在这种情况下,你的用户有一个会话,Paypal(IPN呼叫)获得它自己的会话。

成功付款后,您必须清除返回到您网站的会话变量。这不是万无一失的 - 有可能车辆仍然不会被清除,但这是实现这一目标的唯一途径。

+0

这就是我所想的可能是这种情况,你说的方式使我现在头脑中更加有意义。这是一个会议与贝宝而不是用户的想法是真正让它点击在我的头上。所以没办法从这个会话中杀死另一个会话,即使我可以从这个会话访问其他会话的会话ID吗?因为会话涉及存储在原始会话计算机的用户上的cookie,所以我会这样认为。太糟糕了,但我想这应该工作。我只是想要一些更安全的东西。谢谢! – chris 2011-05-19 19:03:01

+0

如果您曾经转换为Paypal Pro(或者您在自己的网站上收集信用卡信息的任何其他处理器),那么您将可以做更多你想做的事情。使用该系统,您可以使用用户的信用卡信息拨打Paypal电话,并在授权后立即给您回复。 – AndrewR 2011-05-19 21:17:12