Neden benim PHP oturumları ölüyor?

2 Cevap php

Ben PHP ve PayPal API kullanarak bir uygulama var. Bir ödeme almak için çalışan temel yolu bir belirteci almak için PayPal'a bir web hizmeti çağrısı yapmak ve sonra bir tarayıcı ödemek için kullanıcı için bu belirteç ile PayPal'a yönlendirmek olduğunu. Ödeme bilgilerini teyit edilmiş sonra, PayPal başlangıçta hizmeti çağrısı ayarlamak URL'ye geri yönlendirir.

Bu, tüm işleri, milyonlarca insan vesaire, her gün kullanabilirsiniz.

Tuhaf bir şey PayPal geri yönlendirir zaman, PHP oturum gitti, olduğunu. Bir well-documented issue bulunuyor.

İlk soru: bu neden oluyor? Hem sayfalar, hem HTTPS kullanın, aynı etki vardır. Oturum PayPal geri yönlendirme kadar tüm istekleri için çalışıyor.

Bağlantılı forum iplik PayPal isteği oturum kimliği kalıcı ve daha sonra geri almak ve geri yüklemek için oturumu, geçici bir çözüm önerir. Büyük, çalışmak için görünmüyor hariç.

Bazı günlük ifadeleri ekleyebilirsiniz:

log(session_id());

öncesi ve çeşitli yönlendirmeler sonra. Geri PayPal gelirken, ben biraz daha açın.

log("session id is " . session_id());
$session_id = get_session_id_from_paypal();
log("setting it back to " . $session_id);
session_id($session_id);
session_start();
log("session id is now " . session_id());

Sonuç Ben ne beklediğiniz hiç değil:

session_id is fc8f459a186a3f4695ff9ac71b563825
setting it back to 82460dcf8c8ddd538466e7cb89712e72
session_id is now 360ba3fd99d233e0735397278d2b2e55

İkinci soru: neden session id hiç bunu ayarlanmış nedir? Ben yanlış ne yapıyorum? Ya da, en azından, neden oturum değişkenlerinin hiçbiri geri geliyor?

2 Cevap

Sadece bir fikir ...

Do you have session.referer_check set to your host perhaps? The default is the empty string, but it might have been changed ... and when the page 'comes back' from PayPal, php will trash the session info.

Sen phpinfo ile session.referer_check kontrol edebilirsiniz ().

Eğer (a phpinfo yapmak) ve session.auto_start doğruysa söyleyebilir misiniz?