En güncel, iyi uygulama ve PHP oturumları kullanmak için en kolay yolu nedir?

5 Cevap php

PHP oturumları ben onları kullandım son kez bu yana değişmiş gibiydi, bu yüzden nispeten güvenli ve iyi bir yaygın bir uygulama olması için ben oturumları kullanarak basit bir şekilde ama aynı zamanda bakıyorum.

5 Cevap

Oturum yönetimi (Ben 4,4 civarında olduğunu düşünüyorum) biraz zaman geri değişti. Eski mekanizma hala çalışıyor, ancak önerilmemektedir. Oldukça kafa karıştırıcı, bu yüzden net kalıyorum öneririz. Bugün, global değişken $ _SESSION (Bu bir dizi var) erişerek oturumları kullanın. Sen can Orada nesne örneklerini koymak, ancak sonraki sayfada oturumu başlamadan önce bu nesnelerin sınıf tanımlarını yüklemeniz gerekir. autoload Burada size yardımcı olabilir kullanma.

You must start a session before you can use $_SESSION. Since starting the session sends headers, you can't have any output before. This can be solved in one of two ways: Either you always begin the session at the start of your script. Or you buffer all output, and send it out at the end of the script.

Bir iyi bir fikir her isteği üzerine oturumu yeniden etmektir. Bu kaçırmak çok daha az olası hale getirir.

Bu site erişilemez yapabilir çünkü bu, (hafifçe) kötü bir tavsiye. Sen gerekir regenerate the session-id zaman olsa kullanıcıların ayrıcalıkları değişir. Bu oturum tespiti (session-kaçırma bir form) önlemek için içeri giriş yaptıkları zaman genel olarak bu demektir. this recent thread @ Sitepoint konuyla ilgili daha fazla bilgi için bkz.

Cookiebased oturumları kullanarak only Tamam, ancak oturum açma oturumu id en yeniden, eğer herhangi bir ek güvenlik katmıyor, ve erişilebilirlik biraz düşürür.

Bildiğim kadarıyla basitlik gibi, daha iyi almaz:

# Start the session manager
session_start(); 

# Set a var
$_SESSION['foo'] = 'whatever';

# Access the var
print $_SESSION['foo'];

Veritabanı oturumları için daha güvenli olabilir iken, size ilk etapta oturumda saklıyorsanız ne odaklanmak gerekir - bu gerçekten kullanıcıyı (ve sayfalar arasında BELKİ bir ad veya geçici bir değişken tanımlamak için bir kimlik şey ama içermemelidir .)

Ben sadece varsayılan, çerezleri kullanarak öneririm. Veritabanı oturumları her sayfada bir ekstra isabet vermek, ve her site slashdot olsa bile, bu kadar basit bir şey önceden optimize hiçbir zararı yoktur.

Kullanım için, ben standart küresel değişkeni öneriyoruz:

$_SESSION['yourvar'] = 'somevalue';

Tüm kodunda bu yöntemi kullanırsanız, kolayca oturum backends uygulanması birleşik bir yol verir, daha sonra session_set_save_handler kullanımı ile arka-uç değiştirebilirsiniz. Dizi ('Staticclass', 'durukyöntem') - sadece her giriş için dizileri vermek, tüm oturum yönetimini içeren bir nesne kullanabileceğinizi unutmayın.

Daha derinlemesine kullanım için, sana oturumları KohanaPHP nasıl işlendiği bir göz atın öneriyoruz.

Bir Oturum $ OTURUM dizi (sen, oturumdan değişkenleri get ve otomatik güvenlik filtreleri, flaş değişkenler (sonra bir kez distroyed kullanılan var) dahil olmak üzere benzer bir (henüz ayrışabilir) yolu ile göndermek için izin verir) Nesne, saklanması ve varsayılan değer belirleyiciler.

Bu noktada Symfony davranışına bir göz var, çok yararlı olur.

Eğer değil çok özel bir iyi bir iş nedeniniz olmadıkça ilk kapalı, sadece tabanlı tanımlama kullanabilirsiniz. Ben sadece bir proje için url tabanlı oturumların ısrarla bir müşteri vardı. çok güvensiz ve birlikte çalışmak için bir ağrı.

Bir iyi bir fikir her isteği üzerine oturumu yeniden etmektir. Bu kaçırmak çok daha az olası hale getirir. Örneğin,.

session_start();
$old_sessionid = session_id();
session_regenerate_id();
$new_sessionid = session_id();

Eğer sistemin bir parçası olarak kullanıcı giriş çeşit yapıyorsun eğer iyi bir uygulama başka bir şey tamamen kullanıcının gerçekten sistemin dışına kaydedilir sigortalamak için bir logout üzerinde oturum verilerini geçersiz ve boş olduğunu. Ben çıkış sadece oturum tanımlama uzaklaştırılması ile sağlanır sistemlerini gördük.