Сохранить данные в состояние сеанса и синхронизировать их с сеансом Froms Auth - PullRequest
1 голос
/ 30 декабря 2011

Я хочу сохранить некоторые данные в состояние сеанса.Мне нужно сохранить эти данные, когда пользователь впервые входит в систему с помощью аутентификации форм.Мне нужно, чтобы эта переменная состояния сеанса имела то же время жизни, что и срок действия билета проверки подлинности форм.Есть ли какой-нибудь способ обеспечить синхронизацию этих двух файлов?

1 Ответ

3 голосов
/ 30 декабря 2011

Есть ли какой-нибудь способ обеспечить синхронизацию этих двух файлов?

Оба имеют значение тайм-аута в web.config, которое можно установить на одно и то же значение.Теперь, как говорится, вот где ваши проблемы могут начаться.Файл cookie для проверки подлинности форм может иметь скользящую настройку истечения срока действия, а сеанс - нет.Поэтому убедитесь, что вы отключили этот скользящий срок действия для файла cookie аутентификации, если хотите, чтобы два значения времени ожидания совпадали.И это только начало.Для сеанса вы можете выбрать, где его хранить: Off, InProc, StateServer, SqlServer.

Когда вы используете Off (лично то, что я использую), сеанс ASP.NET отключен, и у вас практически нет сеанса.

Когда вы устанавливаете его в InProc (который является значением по умолчанию)) сеанс хранится в памяти.За исключением того, что IIS может решить перезапустить домен приложения при других обстоятельствах: период бездействия, определенный порог ЦП / памяти, ... Это означает, что если сеанс хранится в памяти, а домен приложения выгружается веб-сервером, то выпотерять все, что хранится в этом сеансе, тогда как, очевидно, файл cookie аутентификации продолжает оставаться действительным.

StateServer и SQLServer - это 2 разных режима хранения сеанса вне процесса, когда информация больше не хранится в памяти сети.сервер и может пережить перезапуск AppDomain.

Таким образом, в общем, очень сложно надежно синхронизировать жизненный цикл сеанса ASP.NET и жизненный цикл cookie проверки подлинности с помощью форм ASP.NET.Я решаю эту проблему, вообще не используя сессию ASP.NET.

...