U sustini ja bi licno ostavio mogucnost da se loguje vise puta osim ako to nije ne pozeljno, kada user zahteva drukcije. Ne vidim zasto je ovo neki hendikep ali ako vec mora onda je ono Vesicevo resenje mozda i najbolje (mislim na koncept).
Jedino sto sam ja zapazio i licno mi se ne svidja je ovo
Citat:
2. Za svaku bitnu operaciju proveravaš da li je gore ispunjeno. Ako nije, radiš logout i daješ komentar "Ulogovali ste se na drugom mestu, ova sesija je gotova"
ako je to ono sto mislim, onda ovo moze biti dosta redundantan posao. Nemam bas nesto mnogo iskustva sa web based aplikacijama ali nesto sam malo testirao i cini mi se da bi ovaj deo mozda mogao da se preskoci na sledeci nacin:
U global.asax.cs staviti handler za FormsAuthentication_OnAuthenticate i napisati sledece
Code:
public void FormsAuthentication_OnAuthenticate(object sender, FormsAuthenticationEventArgs args)
{
if (FormsAuthentication.CookiesSupported)
{
if (Request.Cookies[FormsAuthentication.FormsCookieName] != null)
{
FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(
Request.Cookies[FormsAuthentication.FormsCookieName].Value);
string s = (string)Application[ticket.Name];
if (s != null)
{
if (Request.Cookies[FormsAuthentication.FormsCookieName].Value != s)
{
FormsAuthentication.SignOut();
Application.Remove(ticket.Name);
}
}
}
}
}
u login strani prilikom validacije i kreiranja cookie-a napisati
Code:
HttpCookie k = FormsAuthentication.GetAuthCookie(userName, true);
k.Expires = DateTime.Now.Add(new TimeSpan(1, 1, 1, 5));
Response.Cookies.Add(k);
Application.Add(userName, k.Value);
I mislim da vise nista nije potrebno. Sta ovaj code radi? Prvo sto radi je da prilikom autentikacije user-a skladisti u application objekat vrednost cookie-a (na vrednost ne treba mnogo obracati paznju posto je kriptovana, za nas je bitno samo da znamo koja je to vrednost a ne i sta je).
Zatim onaj prvi deo, FormsAuthentication_OnAuthenticate event koji se nalazi u globalu, svaki put kada korisnik namesti zahtev ova f-ja proverava u application objektu da li postoji vrednost za user-a koji je autentikovan, tj. user koji pravi zahtev. Ukoliko postoji vrednost, proverava se da li je ta vrednost jednaka vrednosti koja je prosledena sa zahtevom u cookie-u. Ukoliko su te dve vrednosti jednake to znaci da je u aplication objektu korisnik koji se zadnji ulogovao sa tim korisnicim imenom, ukoliko te vrednosti nisu jednake znaci da se neko posle ulogovao sa istim korisnickim imenom sto na kraju dovodi do toga da se korisnik ispisuje (FormsAuthentication.SignOut).
Huh, sada kad sam procitao ponovo deluje mozda malo zbunjujuce ali zato je tu code pa...