Когда я храню значение в сеансе и некоторое исключение возникает после этого, состояние сеанса может не сохраняться.Когда сохраняется состояние сеанса ASP.NET
Session["MyKey"] = value;
throw new Exception("Test exception");
я узнал, что, если я использую режим InProc
, значение получает сразу же сохраняется, так что, если происходит исключение, он хранится в любом случае.
Но если я переключусь на режим StateServer
, значение не будет сохраняться, если возникло исключение. Я могу писать на сеанс, читать его снова из сеанса, но после возникновения исключения это все изменения, которые я сделал для состояния сеанса в этом запросе, будут отброшены (т. Е. Не будут сохраняться). И любой будущий запрос будет читать «старое» состояние сеанса.
Сначала я думал, что это связано с тем, что cookie сеанса не отправляется в ответ в случае исключения, но это происходит для уже существующих сеансов, и пользователи уже имеют свои идентификаторы. Он также явно отличается от InProc
до StateServer
, тогда как оба этих подхода обрабатывают файлы cookie одинаково, это просто уровень сопротивления, который отличается.
Как работает стойка состояния сеанса? В какой момент жизненного цикла запроса произошли изменения, которые фактически сохранялись до StateServer
? Можно ли принудительно сохранить состояние сеанса, чтобы оно сохранялось даже после возникновения исключения?
Может быть дубликат (или очень близко) к http://stackoverflow.com/questions/9985499/how-does-sql-server-session-state-persistence-work –