2012-03-21 2 views
4

Мы используем .net framework 3.5 и C#..NET Session - сеанс Persist, даже когда пользователь закрывает браузер

У нас есть сайт, для которого требуется вход в систему. Поэтому мы используем базу данных, чтобы проверить правильность ввода/пароля.

Затем мы делаем вызов FormsAuthentication.SetAuthCookie(), так что пользователь we''l быть вошли в мое приложение.

И на всех последующих страницах, мы проверяем с User.Identity.IsAuthenticated(), если пользователь вошел в систему.

Мы хотим сохранить эту сессию, даже когда пользователь закрывает borwser.

Как наилучшим образом сделать это?

У нас также есть проблема с потерянными сеансами, внезапно пользователь потерял свой аутентифицированный статус, я думаю, что с таким новым упорством мы также можем решить эту проблему.

(извините за мой английский ..... португальского динамика)

ответ

6

Не следует смешивать термины, помните, что у вас есть и куки аутентификации и состояние сеанса в ASP.NET.

Вы, кажется, ищете постоянный файл cookie. иметь стойкое Auth печенье попробовать

FormsAuthentication.SetAuthCookie("xxx",true); 

http://msdn.microsoft.com/en-us/library/twk5762b(v=vs.90).aspx

прохождение верно позволят куки аутентификации, чтобы выжить перезагрузки браузера. также вы должны рассмотреть ваши значения тайм-аута для проверки подлинности форм и сессии в вашем web.config

<authentication mode="Forms"> 
     <!-- The name, protection, and path attributes must match 
     exactly in each Web.config file. --> 
     <forms loginUrl="Default.aspx" name=".ASPXFORMSAUTH" protection="All" path="/" timeout="360"/> 
    </authentication> 

<sessionState mode="InProc" timeout="360" /> 
1

Я хотел бы предложить более чистый подход для хранения информации о сеансе. Разумеется, подход Shay для сохранения cookie аутентификации правильный, но сохранение sessionState в процессе в течение длительного времени имеет серьезные недостатки при масштабировании приложения для нескольких одновременных пользователей.

Во-первых, чтобы уточнить, состояние сеанса означает буквально все, что вы можете получить через коллекцию Session[].

Лучшая техника, которую я видел успешно используемой * крупным банком, заключается в хранении связанной с постоянным сеансом информации внутри базы данных.

В основном вам нужно

  1. таблица, которая является primary и foreign сконструирована так, чтобы идентификатор пользователя, с) столько столбцов, сколько переменных, которые необходимо хранить или б) один один столбец BLOB, содержащий последовательное значение класса
  2. A PersistentSession класс
  3. Заполнить этот объект в глобальном масштабе.asax Session_Start или лучше Application_PostAuthenticateRequest метод и сохранить его в Session объекте
  4. Сохранить объект из Session к БД в Global.asax Session_End метод

Если вы выбрали подход B просто сериализации/десериализации объекта и вы его получили!

* Настоящий способ SAVESESSION был использован этими ребятами совсем по-другому

Смежные вопросы