Как да управлявате влизане и излизане от множество акаунти в различни страници на браузъра?

Имам уебсайт, създаден на App Engine (Java) и трябва потребител да използва акаунт в Google, за да влезе.

Ситуацията е следната:

  1. Потребителят Adam има множество акаунти.
  2. Потребителят Adam влиза с акаунт Adam1 и получава данните си Adam1 в страница A на браузъра.
  3. Той щракна върху връзката за излизане, но я отвори в друг раздел B (същия браузър, разбира се)
  4. Той влиза с друг акаунт Adam2 в страница B на браузъра и показва данните му Adam2.
  5. След това той се върна на страница А на браузъра и направи някои промени в данните си и след това изпрати до сървъра, в този момент приложението ми ще разпознае, че текущият потребител е Adam2 и промените ще бъдат направени на Adam2, състоянието не съответства на текущата страница A, нашият потребител може да е объркан.

Мислех, че може би мога да прикача параметър за userID, докато правя заявка за промяна към сървъра и страната на сървъра ще сравни текущата потребителска идентификация с този параметър за userID, за да направи заявката за промяна обработена или да върне команда за опресняване, за да направи страницата остаряла обновява се до текущия акаунт, ако идентификаторите не са еднакви.

Каква е най-добрата практика за справяне с тази ситуация?


person virsir    schedule 02.03.2010    source източник


Отговори (2)


Поставете скрито поле във вашите формуляри, което е комбиниран хеш на ИД на сесията и ИД на потребителя. Когато вашият сървър обработи заявката, проверете отново дали комбинираният хеш, изпратен заедно със заявката, отговаря на това, което очаквате. Ако или потребителят, или сесията са грешни, хешът няма да съвпадне и можете да съобщите за грешка по подходящ начин.

person John Feminella    schedule 02.03.2010

Вероятно потребителят ще бъде идентифициран чрез идентификатор на сесия, който се изпраща като информация за бисквитка. Адам на сайт А ще има различен идентификатор на сесия от Адам на сайт Б поради различното влизане. Също така се предполага, че страницата с формуляра ще бъде защитена, така че потребителят трябва да е влязъл, за да има достъп до нея.

Когато Адам излезе от страница B, старата сесия се унищожава на сървъра и влизането става невалидно. Когато Adam изпрати формуляра от страница A, браузърът не знае, че това се е случило и ще изпрати формуляра заедно със стария идентификатор на сесия. Сървърът (трябва) да отхвърли това изпращане, тъй като сесията вече е изтекла.

Следователно, в правилно кодирана система за управление на сесии/потребители, това не е проблем. Критичният момент е да подновите/анулирате идентификатора на сесията при излизане.

person deceze♦    schedule 02.03.2010
comment
Може да сте разбрали погрешно въпроса ми, няма сайт A и сайт B, а само две страници, отворени от браузър за един и същ сайт. Идентификаторът на сесията няма да се промени, докато потребителят не затвори браузъра и не се опита да получи нова сесия. - person virsir; 02.03.2010
comment
@virsir Разбирам въпроса ви и използвам термините страница A и страница B по същия начин, както вие във въпроса си. Това, което казвам е, че идентификаторът на сесията трябва да се промени, когато излезете, което би направило този проблем спорен. - person deceze♦; 02.03.2010