Bunun yerine kullanıcı hareketsiz \ etkin olup olmadığını saklamak, bir işlem başına bazında kullanıcıya karşı kontrol edilebilir bazı özellik depolamak için daha iyidir; kullanıcı kimlik doğrulaması gerektiren bir şey yapmaya çalışır, her zaman olduğu gibi, o devam önce bu nitelik eşleştiğini görmek için kontrol eder.
Ben size şu tavsiye ederiz;
Birincisi, onlar bir sha1
of time()
a> çarpışmaları önlemek için yeterli olacağını hayal ediyorum oturum açtığınızda benzersiz kullanıcıyı tanımlamak için bir karma oluşturmak. Seçtiğiniz ne olursa olsun, bu farklı değil gibi (örneğin, IP adresi ya da tarayıcınızın user-agent karma yok oturum başka bir kullanıcı aynı karma alma inanılmaz derecede düşük bir şans olacak ki yeterince zengindir emin olun yeterli).
Ikinci; karma farklı olması gerektiği gibi, kendi veritabanı ve kullanıcının session Aksi içeri günlüğün zamanda etkili bir 'dışarı log' olacak önceki kullanıcı bu karma saklamak birisi oturum açtığında her zaman
Biz oturumları kullanıyorsanız bu yana, bir çerez otomatik olarak kendi oturum verilerine kullanıcıyı tanımlayan benzersiz bir kimliği içerecek kullanıcının tarayıcısında konulmalıdır. Çerez içeriği endişe gerçekten değildir.
Sonraki, kullanıcı kimlik doğrulaması sağlamak için her komut dosyası başında adı verilecek authenticateUser()
veya benzer adlı bir işlev oluşturun. Bu script kullanıcının kimliği ile bir kullanıcının kullanıcı karma eşleşen bir karma olup olmadığını görmek için kontrol, veritabanını sorgulamak gerekir.
Örneğin
function authenticateUser($id, $hash, $databaseLink) {
# SQL
$sql = 'SELECT EXISTS(
SELECT 1
FROM `tbl_users`
WHERE `id` = \''.mysql_real_escape_string($id).'\'
AND `has`h = \''.mysql_real_escape_string($hash).'\'
LIMIT 1
);';
# Run Query
if ($query = mysql_query($sql, $databaseLink)) {
# Get the first row of the results
# Assuming 'id' is your primary key, there
# should only ever be one row anyway.
$result = mysql_fetch_row($query);
# Casting to boolean isn't strictly necessary here
# its included to indicate the mysql result should
# only ever been 1 or 0.
return (bool)($result[0]);
} else {
# Query error :(
return false;
}
}
Sonra biz sadece sizden bir veritabanı bağlantısı için ((sizin oturum başına veri) authenticateUser()
kullanıcının ID
, hash
geçmek ve bir database link
) daha önce açılmış olması gerekir.
authenticateUser()
döner true
, kullanıcı kimlik doğrulaması ise. false
, kullanıcı değil VEYA veritabanı kullanılamaz veya bir SQL hata varsa.
Bir veritabanı istek sayfası istek başına bir kez gönderilir gibi, bu sunucu yükü artacak ancak lütfen unutmayın. Bu binlerce insan herhangi bir zamanda giriş olan dev projeler üzerinde bunu yapmak için muhtemelen tüm bu akıllıca değil. Birisi iyileştirmeler önermek eminim.
Çerezleri asla güvenme gibi Ayrıca, süresi dolmak üzere çerez bekliyor, oturum etkin olmuştur insanları zorlamak için en iyi yol değildir. Bunun yerine, kullanıcı kimlik doğrulaması her zaman güncelleyebilirsiniz last_active
adında bir sütun ekleyebilirsiniz. Bu da sunucu yük artacak, ancak el, diyelim ki, 3 saat etkin olan kullanıcılar için hash
kaldırarak bayat log-in geçersiz sağlayacaktır.