Session v asp.net 4

Mates

Session v asp.net 4
« kdy: 24. 11. 2011, 20:09:11 »
Zdravím,

předem oznamuji, že se můj dotaz týká bakalářské práce a nevyžaduji psaní kódu, pouze by mě zajímal Váš názor.

Programuji webovou aplikaci a řeším přihlašování uživatelů a jejich přístup do jednotlivých sekcí webu. Zatím je to vyřešeno takto:

- pro uložení informací o uživateli (jeho jméno a přístupová práva) je použito session
- aplikace používá mnou vytvořenou databázi s uživateli (SQL 2008)
- pokud někdo přijde na stránku, je mu uděleno už. jméno anonymous a se stejným jménem i právo přístupu. Takový uživatel může pouze procházet úvodní stránky modulů a dostat se na přihlašovací stránku
- pokud se přihlásí řadový student, do session je uloženo student a má přístup kamkoli, kromě admin sekce
- pokud se přihlásí admin, je do session je uloženo admin a má přístup do všech částí webu
- při odhlášení uživatele je session zrušena

Tak, jak jsem to popsal výše, mi to zatím funguje dobře. Problém ovšem je, jak ukončit session, pokud se uživatel neodhlásí, ale pouze zavře záložku v prohlížeči, popř. samotný prohlížeč. Dočetl jsem se, že při použití session toto není možné zjistit. A nastavit session timeout natvrdo a upozornit uživatele, aby co (např.) 5 minut udělal refresh, mi nepřijde moc košer.

Rád bych znal váš názor, co si myslíte o použité metodě, popř. jak vylepšit zabezpečení nebo   jiným způsobem řešit uživatelské sezení (abych to odlišil). Díky


Tomas Voracek

Re: Session v asp.net 4
« Odpověď #1 kdy: 24. 11. 2011, 20:33:58 »
Hmm, nejaky duvod proc nepouzit membership? Jinak Session timeout se da zachytit v Global.asax, nevim kde jsi cetl ze se to zjistit neda.

Take si dovolim popichnuti, kdo vsechno dnes ma Bc. Clovek na VS by mel byt schopen takovehle naproste zaklady najit v dokumentaci/Google.

Mates

Re: Session v asp.net 4
« Odpověď #2 kdy: 24. 11. 2011, 20:36:26 »
Vím, že se dá session timeout zachytit v global.asax, ale mě jde o to, jak zachytit zavření karty prohlížeče/prohlížeče

Tomas Voracek

Re: Session v asp.net 4
« Odpověď #3 kdy: 24. 11. 2011, 21:00:10 »
Porad nechapu proc nepouzit FormsAuthentication.

Zavreni okna prohlizece muzes zachytit pomoci JS, ale spolehlivost je 0.

Mates

Re: Session v asp.net 4
« Odpověď #4 kdy: 24. 11. 2011, 21:06:06 »
OK, mrknu na ten FA a jestli se můžu zeptat: Ten hlídá odpojení uživatele ? A hádám, že pokud chci používat vlastní databázi uživatelů, tak si nějak budu muset implementovat vlastní membership model (protože jinak se používá defaultní databáze)


DarkKnight

Re: Session v asp.net 4
« Odpověď #5 kdy: 24. 11. 2011, 23:38:26 »
muzes to vyresit treba javascriptovymi requesty, ktere budou hlidat, jestli session zavrit nebo ne (napriklad budes vysilat pozadavek pres ajax na server co pet minut, nekde si budes ukladat cas posledniho requestu, jak prijde uzivatel s danou session na stranku - pokud je "request time" pod x minut (treba 6,7) , nezavrel okno/panel a bude pracovat normalne, pokud bude cas vyssi, zrusis session

Mmad

Re: Session v asp.net 4
« Odpověď #6 kdy: 25. 11. 2011, 00:05:37 »
V PHP se běžně session timeoutuje. Je to jednodušší (a napsat volitelný timeout je triviální) a nehrozí zcizení session dalším uživatelem stejného stroje (hlídat MitM a další srandy se normálním stránkám nevyplatí nebo už mají https).

Kit

Re: Session v asp.net 4
« Odpověď #7 kdy: 25. 11. 2011, 08:48:08 »
Využil bych javascriptové události onUnload a ajaxem poslal požadavek na zrušení session. Pro většinu případů to bude vyhovovat, zbytek odchytí timeout.