Off-sitesi atılıyor sonra devam PHP oturumları alıyorum Yardım

5 Cevap php

PHP ile bir ödeme ağ geçidi sistem üzerinde çalışıyoruz. Biz alışveriş sepeti verileri depolamak için oturumları kullanın. Sistem off-site ödeme sağlayıcısının sitesine götürür, ve sonra sitenize dönüyoruz. Sitemizde geri gelmesi ve oturum veriler hala orada olan zaman çoğu konak, biz hiçbir sorunları var. Bir konu ile olanlara, PHP oturum referer_check kapatarak geçmişte çalıştı. Biz gerçekten bir GET değişkeni olarak PHPSESSID eklemek istiyorum, ve önlemek için umut yok. Ne aradığım diğer sunucu yapılandırmaları oturumu öldürdü neden ne olduğunu ve diğer geçici çözümler olabilir.

Yardımlarınız için teşekkürler.

5 Cevap

Çerez tabanlı oturumları kullanarak birkaç olasılık var:

Olanakları bir sürü var. Burada bir soruna neden olabilir birçoğu tüm oturum ilgili PHP zamanı ayarları bulunuyor:

http://www.php.net/manual/en/session.configuration.php

Ben aynı sorunu var ve çoğunlukla çerez ömür ve çerez alanı ile ilgili olan, www.example.org örneğin, IE için example.org olarak aynı değildir.

Bu aa PHP güvenliği çok gölgeli alanı - nasıl url bir çerez veya session id maruz kalmadan oturumu devam etmek? Ne yazık ki, sadece biraz güvenli çözüm bir tanımlama ile olur ama ben mümkün olduğunca güvenli hale getirmek için bir yol denemek ve açıklamak gerekir.

Kullanıcı off-site gitmeden önce tekrar giriş bilgilerini sağlamaya gerek olmadan onları geri kabul veritabanı hazırlamak gerekir - kullanıcı tabloda iki sütun oluşturmak - "anahtar" ve "zaman aşımı".

Bir kullanıcı ödeme ağ geçidi üzerinden siteyi terk hazırlanırken Şimdi, veritabanındaki kayıt güncelleme gerekiyor - saklamak için benzersiz bir anahtar oluşturur.

$key = md5(uniqid(rand(), true));

Bir zaman aşımı (- ihtiyacınız ne olursa olsun diyelim ki, bir saat ya da iki, hatta bütün bir gün) ile birlikte datebase bu saklayın. Bu kadar da belirtilen süre içinde geri dönmek ve doğru anahtarı üretmek gibi sistem kullanıcıyı tanıması ve tekrar oturum hakkında endişelenmenize gerek yok devam edecektir.

Şimdi aynı anahtarı ve, diyelim ki, onların bir username tuzlu md5 hash (sadece durumda) ile bir çerez ayarlamanız gerekir. Eğer (hassas bilgilerin sonsuza dek ortalıkta eski çerezleri istemiyorum) veritabanında kendi plak verdi aynı zaman aşımı vermek emin olun.

Onlar siteye iade ettik benzersiz kimliği ve karma adı ile çerez kapmak ve veritabanında anahtar / zaman aşımı kombinasyonu karşılaştırın. Eğer uyarsa, tüm iyi. Sonra bir çerezi silmek.

Gerçek oluşturmak Hayır çerez hayır oturum, sadece ek bir parametre olarak gönderilen bir uniq id kullanın veya ödeme sistemi (genellikle tx id da yapabilirdi) özniteliği, dönüş sayfa url üzerinde, kimliği alınan uniq belirlemek ve karşılaştırmak için bir fonksiyon yazmak kullanıcı için yeni bir oturum.

Oturum zaman aşımı sorunu gelince, sunucu yapılandırılmış sürenin uzunluğu olmalıdır. Sunucunun php.ini dosyasını gözden geçirmek gerekebilir.

Ben şu bu sefer değiştirebileceğini bilmek var:

php_value session.gc_maxlifetime 72000 /* I have not tested this */

Ben web sitesinden dışarı çıkmadan önce ve dönen sayfada sayfasında aşağıdaki komut dosyası kullanarak kullanıcı oturumunda bir parmak izi kimliği oluşturmak için benim yöntemi kullanabilirsiniz düşünüyorum.

$string = $_SERVER['HTTP_USER_AGENT'];
$string .= 'GHYU&*%HHD#JSFHJJFD(*JFJ'; // any long value
        /* Add any other data that is consistent */
$fingerprint = md5($string);



if (isset($_SESSION['HTTP_USER_AGENT']))
    {
        if ($_SESSION['HTTP_USER_AGENT'] !== $fingerprint)
        {
            /* Prompt for password */
            session_destroy();
            header("Location:"."URL/PATH/TO/LOGIN");
        }
    }
else
    {   
        $_SESSION['HTTP_USER_AGENT'] = $fingerprint;
}