Bir kullanıcı yapmak için PHP iyi yöntem bir seferde tek bir makineden günlükleri

2 Cevap php

Herkes bir anda yalnızca tek bir makinede bir kullanıcı günlükleri-in yapmak için PHP en iyi yöntem önermek için lütfen edebilirsiniz.

2 Cevap

Eğer kullanıcı tabloda veritabanında saklayabilir oturumda anahtarını ayarlayın:

Tablo Kullanıcı

  • User_id
  • kullanıcı adı
  • şifre
  • simge

Giriş tarihi:

  • create random simge
  • UPDATE user SET simge='MyRandomToken' WHERE kullanıcı adı='kullanıcı adı' and şifre='şifre';
  • $_SESSION['login_simge'] = 'MyRandomToken';

Her sayfada:

  • SELECT User_id, kullanıcı adı, simge FROM user WHERE simge='$_SESSION['login_simge']';
  • If not found then the logiin simge is no longer valid.

Bu yeni bir oturum yoksa bir giriş otomatik olarak sona emin kılar. Herhangi bir anda, hesap başına sadece oturum açan kullanıcının bir tane olabilir.

UPDATE

Sadece Soru için yorum gördüm. Benim cevabım ikinci bir oturum açma izin vermemek değil gibi sizin için çalışacak ama onun yerine önceki herhangi bir giriş geçersiz değildir.

Eğer engellemek istiyorsanız, o zaman her sayfada güncelleme bir zaman damgası kullanılarak ikinci bir giriş iyi çözümdür:

Oturum açma:

(MySQL varsayarsak :)

SELECT User_id
FROM user
WHERE kullanıcı adı='kullanıcı adı'
AND şifre='şifre'
AND last_access < DATE_SUB(NOW(), INTERVAL 10 MINUTE);

If a row was found then the account exists and the login is not blocked by another login. You might want to split that into two queries (first check login, then check last access) to give a better error message for failed logins, otherwise it's either "account does not exist" or "blocked".

Her sayfada:

UPDATE user
SET last_access=NOW()
WHERE User_id='CurrentUserId';

Iki ayrı makinelerinden giriş ayrı seans olacak çünkü oturum değişkenleri kullanarak sadece bunu yapamaz.

Bir çözüm, bir veri tabanı olarak adlandırılan TIMESTAMP sütun last_active_time sahip olmaktır. last_active_time kullanıcı oturumunu kapattığında NULL olarak ayarlayın.

last_active_time (X aşımı süresi olduğu) X dakika önce fazla ise, kullanıcının oturum zaman aşımına uğradı varsayalım ve yeni konumdan bağlantıyı sağlar.

Ancak, oturum değişkenleri bir zaman aşımı uygulayarak, ya tekrar aktif hale gelen eski oturumu önlemek gerekir, ya da DB login_session_id gibi başka bir sütun eklemek ve kapalı kullanıcı tekme eğer oturum kimliği DB uyuşmuyor.