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í:
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.