variable sesiones sesion net mvc manejo example asp asp.net asp.net-mvc session-variables

asp.net - sesiones - variables de session c# mvc 5



Controller SessionStateBehavior es ReadOnly y puedo actualizar Session Variable (3)

Espero que si el controlador tiene el atributo SessionStateBehavior.ReadOnly , no pueda cambiar las variables de sesión dentro de este controlador, pero sí puedo cambiar los valores.

Trato este codigo

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


Consulte Escritura en una sesión de solo lectura en MVC 3+.

Esa publicación afirma que el comportamiento es inconsistente. Definitivamente puedo escribir en Session in Controllers usando ReadOnly.

Yo lo trataría así:

  • Requerido significa que está solicitando un bloqueo exclusivo en la sesión (es decir, no hay procesamiento paralelo de solicitudes para el mismo ID de sesión)
  • ReadOnly significa que está solicitando un bloqueo no exclusivo en la sesión (es decir, su solicitud todavía tiene que esperar a que finalicen las solicitudes con un bloqueo exclusivo, pero puede procesar solicitudes con bloqueos no exclusivos en paralelo. Sin embargo, es su responsabilidad que su código no se escribe en la sesión. No se aplica necesariamente en el marco)

    Me doy cuenta de que esto va en contra de http://msdn.microsoft.com/en-us/library/system.web.sessionstate.sessionstatebehavior.aspx

    El estado de sesión de solo lectura está habilitado para la solicitud. Esto significa que el estado de la sesión no se puede actualizar.

    Pero parece que de hecho puedes actualizar el estado de la sesión en algunos escenarios.


  • Esta es solo mi interpretación:

    Veo que se puede agregar a la Session durante el método de acción; después de todo, la sesión es solo un diccionario. Sin embargo, la sesión no se guarda al final.

    Parece que debería lanzar una excepción, pero tal vez debido a que esta característica llegó más tarde al marco, decidieron no realizar comprobaciones cada vez.

    Los resultados también pueden variar dependiendo del almacenamiento de estado de sesión que esté utilizando (servidor inproc / sql).


    Según Patrick Y. Ng ( ingeniero de software de Microsoft ) que diseñó y desarrolló el motor de estado de sesión de ASP.NET:

    Aunque EnableSessionState está marcado como ReadOnly, en el estado InProc, el usuario todavía puede modificar la sesión. La única diferencia es que la sesión no se bloqueará durante la solicitud. Esta limitación es por diseño. Y lamento que no esté documentado en MSDN.

    Hay mucha más información útil sobre el estado de la sesión en esta publicación . Realmente vale la pena leerlo.