Подтвердить что ты не робот

Контроллер SessionStateBehavior - это ReadOnly, и я могу обновить Session Variable

Я ожидаю, что если у контроллера есть атрибут SessionStateBehavior.ReadOnly, то я не могу изменить переменные сеанса внутри этого контроллера но я могу изменить значения.

Я пробую этот код

 [SessionState(System.Web.SessionState.SessionStateBehavior.ReadOnly)]
    public class GLobalController : Controller
    {
      public  ActionResult Index()
        {
            Session["xxx"] = DateTime.Now.ToString();
            return View();
        }
4b9b3361

Ответ 1

см. Запись на сеанс только для чтения в MVC 3+

Это сообщение утверждает, что поведение непоследовательно. Я определенно могу написать Session в контроллерах, используя ReadOnly.

Я бы относился к этому так:

Обязательный означает, что вы запрашиваете эксклюзивную блокировку сеанса (т.е. Параллельная обработка запросов для того же идентификатора сеанса) ReadOnly означает, что вы запрашиваете неэксклюзивную блокировку сеанса (т.е. Ваш запрос по-прежнему должен ждать завершения запросов с исключительной блокировкой, но вы можете обрабатывать запросы с неэксклюзивными блокировками параллельно. Однако это зависит от вы убедитесь, что ваш код не записывается на сеанс. Это не обязательно выполняется каркасом)

Я понимаю, что это противоречит http://msdn.microsoft.com/en-us/library/system.web.sessionstate.sessionstatebehavior.aspx

Для запроса включено состояние сеанса только для чтения. Это означает, что состояние сеанса не может быть обновлено.

но, похоже, вы действительно можете обновить состояние сеанса в некоторых сценариях.

Ответ 2

Это только моя интерпретация:

Я вижу, что вы можете добавить к Session во время действия метода - ведь сеанс - это просто словарь. Однако сеанс не сохраняется в конце.

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

Результаты могут варьироваться и в зависимости от того, какое хранилище состояния сеанса вы используете (inproc/sql server).