2011-05-19 85 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