Her kullanıcı aynı anda tek bir makinede oturum açmış olmanız izin Sistem tasarımı giriniz

8 Cevap php

Her adınız yalnızca bir anda bir yerde oturum böylece Nasıl bir giriş sistemi tasarlamak gerekir? Ben giriş için başka birine kendi adınızı vererek kullanıcıların tutmak istiyorsanız bu yüzden her kullanıcı için ödeme önleyebilirsiniz.

Bir kullanıcı zaten giriş ve ben (kullanıcı iş giriş ve ardından evde almak için çalıştı eğer bir sorun olabilir) 2 oturum engellemek gerekir, başka bir makinede oturum çalışırsa ne olur? Yoksa 2. oturum izin ve 1 giriş bitmeli? Ya da herkes daha iyi bir öneri var mı?

8 Cevap

Bazı Instant Messengers (sadece bitiş noktası açmış biri ile çalışabilir) bu tür çatışmaları çözmek güzel bir yol var. Onlar gibi bir mesaj gösterilir

Zaten <COMPUTERNAME> itibaren kaydedilir

(Bir web uygulaması durumunda, bu <IP/Browser> olurdu)

ve size arasında bir seçim vermek

  • hayatta bu oturum açma bırakarak (ve değil konum makineden oturum), ya da
  • mevcut oturum açma biten (ve geçerli makinede oturum).

Bu teknik olarak en zorlu, ama kesinlikle en samimi yoludur - bu konuda çok açık olmadan, bir kullanıcının tek bir seans çalışan var sağlar. Ve onlar gibi iş, dışarı oturum unuttum çünkü giriş yapamaz kullanıcılar ile hiçbir kötü kan var

Warcraft Blizzard'ın Dünya güzelce uygular Buna inanıyorum.

Eğer zaten imzalandıktan sonra oyuna oturum açmaya çalıştığınızda, temelde, ilk bağlantı başladı edilir.

Bu temelde sadece veritabanında saklanan oturum yapma gerektirir. Eğer oturum verilerini saklarken de bir kullanıcı adı saklayın. Ne zaman kullanıcıların isimde herhangi bir oturum kayıtlarını silmek, ve o kişi içeri giriş için yeni bir tane oluşturun, bir kullanıcı oturum açtığında

Kullanıcıların geri onlar oturum unuttum sırf onlar (muhtemelen km uzaklıkta) sahip başka bir bilgisayara gitmek zorunda istemiyorum çünkü ben, oturum çalışıyorum 'yeni' insanlar engelleme tavsiye etmem.


Aklınıza gerekebilir bazı başka şeyler de vardır. Oturumkimliği kaçırma gibi şeyler. Bir kullanıcı sadece sağ oturum kimliği ile (her zaman mümkündür) kendi sisteminde bir çerez koyar ise, birden çok bilgisayar üzerinde aynı oturum kullanmak olasıdır. Muhtemelen şu anda oturum açmış kimin verileri tutmak bir IP alanını tutmak isterdim bu durumda.

Bu sorunun tipik bir yaklaşım kullanmak için bir

inactivity time-out period.

Bahsedilen durum için izin verirken Bu sistem, hesap başına oturumların bir sayısını zorlar: Bir kullanıcı oturum olmadan ofis bıraktı ve onun / onu eve iş istasyonundan giriş çalışır.

Burada, böyle bir sistemin genel hatları

  • Her hesap (bu OP, her hesap için, bir ve yalnızca birini diledi görünüyor, ancak bu daha fazla olabilir, ve bir hesabı esasına göre değişir) izin eşzamanlı oturumlar (aka "koltuk") bir dizi ile ilişkilidir.
  • Lisans yöneticisi mantığı tüm hesaplar / kullanıcıların bir listesini tutar anda oturum açmış, onların "son" etkinliği ile bir zaman damgası ile birlikte.
  • Herhangi bir sayfayı Servisten önce, web uygulaması, lisans yöneticisi (LM) çağırır. Amaç LM "son" faaliyet damgası güncelleştirmek için izin vermek değil, aynı zamanda lisans alınmış durumda çağrısı (bu aşağıda daha fazla) inkar
  • Her giriş yaptıktan sonra, lisans yöneticisi mantık alınan koltuk sayısı hesabı için belirlenen tutarı aşmayan doğrular.
  • Bu durumda değilse, LM sadece aktif oturumu listesine Geçerli oturumu ekler
  • Bu durumda, zaman aşımı süresi daha eski listesinde oturumları için LM çek. Biri bulunursa, onu devre dışı bırakır, ve hibe yeni oturum açma erişim. Hiçbiri bulunursa, giriş engellendi.
  • Her [açık] log-out üzerine, LM aktif oturumu listelerinden gelen oturumu kaldırır.

Yukarıda özetlenen genel prensip özellikle bazı farklılıklar olabileceğini unutmayın:

  • yerine sessizce ve sistematik [tipik eski] zaman aşımına uğradı oturumu geçersiz yerine, bir bu durumla ilgili oturum şu anda çalışırken kullanıcıyı bilgilendirmek ve / Onu böyle bir oturumu "öldürmek" için ihtiyaç karar verelim.
  • Her yeni sayfa isteği ile LM Zahmetli önlemek için, web uygulama oturumu LM son "yenilendi" beri zaman bir oturum başına bazında takip ve böyle deme zamanı aşması durumunda sadece LM arayabilirsiniz zaman aşımı süresinin 1/3.

Bağımsız başına se LM mantığı, bir log of all the LM-related events tutmak için unutmayın (giriş, logouts, inaktif oturum "öldürür", ... oturumların reddetti). Böyle günlükleri tarih / saati, IP adresi ve diğer ilgili bilgi içerir ve çalıntı şifreler ve bu tür ile ilgili sorunları çözerken yararlıdır gerekir. Böyle günlükleri de çok az koltuk için (ve bu nedenle bazı Ugrade alabiliyorlardı) görünen tüm hesapları bulmak için, ya da risk hesapları vs bulmak için, örneğin, paha biçilmez pazarlama içerir

Birkaç daha hususlar

  • kolay kullanıcıların log-out için sabit bir yerde en her sayfada (log-out düğmesi / bağlantısını yapmak
  • kolay kullanıcıların çatışma / çalıntı şifre durumu bildirmek için yapmak

Ilk giriş engelleyin. Evde oturum eğer bu bir yasal yöntem olduğundan, daha sonra iş, sen, bloke etmek istemiyorum. Her zaman şimdiki giriş izin ve eskileri bırakın.

Her kullanıcı giriş olup olmadığı takip ve ikinci oturum birinci oturumu oturumu sonlandırmak için izin öneriyoruz.

Sonra kimin oturum hatalıdırlar başladı olsaydı olası dolandırıcılık faaliyeti rapor sona erdi kullanıcıya izin verir.

IP sayısını sayarak bunu yapmaya kalkmayın, bir kullanıcı bir aktif oturumu olan adresleri - bazı kullanıcılar yük dengeli proxy arkasında olabilir.

Bir veritabanı arka uç ile muhtemelen kolay - - ve sadece tek bir kullanıcı bir açık oturum için izin çözüm kendi oturum işleyici yazmak için.

Sen ayarlamak oturumun çöp toplama ve hareketsizlik isteyebilirsiniz. Ayrıca sistem oturum sabitleme saldırısından olduğundan emin olmanız gerekir.

C.

Güvenlik, ve bu size ne elde ediyoruz açısından, bu nasıl olsa bir veritabanında oturum verilerini saklamak için her zaman iyi bir fikirdir. Eğer paylaşılan bir sunucuda konum, özellikle eğer.

Hangi kullanıcı bu yargılamak için bir konudur öldürmek için izin ve bakımından. Ben onlar hesabın gerçek sahibi olduğundan emin olmak için kimlik bazı ikincil formu var varsayalım. Aslında o kadar imzalanmış bir.

Ben aynı gereksinimi vardı bir web uygulamasında daha önce yaptık. İşte ne yaptım:

Birisi açtığında, bir GUID oluşturmak ve kullanıcıya bağlı, veritabanında saklayabilirsiniz. Ayrıca bir oturum çerezi bu aynı GUID depolamak.

Bir kullanıcı oturum Her zaman sitenizdeki herhangi bir sayfayı vurur, onların çerez GUID kontrol ve veritabanından kendilerine atanan GUID ile karşılaştırın. Bu Guıd'ler uymuyorsa, başka bir makinede oturum açmış olduğunuz ve size o oturumda onları dışarı oturum açın.

Bu yöntem, gerçekten iyi çalışıyor.