Le contrôleur SessionStateBehavior est en lecture seule et je peux mettre à jour la Variable de Session
Je m'attends à ce que si le contrôleur a l'attribut SessionStateBehavior.ReadOnly
Alors je ne peux pas changer les variables de session à l'intérieur de ce contrôleur
mais je peux changer les valeurs.
J'essaie ce code
[SessionState(System.Web.SessionState.SessionStateBehavior.ReadOnly)]
public class GLobalController : Controller
{
public ActionResult Index()
{
Session["xxx"] = DateTime.Now.ToString();
return View();
}
3 réponses
Voir écriture dans une session en lecture seule dans MVC 3+
Cette publication prétend que le comportement est incohérent. Je suis certainement capable d'écrire à la Session dans les contrôleurs en utilisant ReadOnly.
Je le traiterais comme ceci:
Je me rends compte que c'est contre http://msdn.microsoft.com/en-us/library/system.web.sessionstate.sessionstatebehavior.aspx
L'état de la session en lecture seule est activé pour la requête. Cela signifie que l'état de session ne peut pas être mettre.
Mais il semble que vous puissiez en fait mettre à jour l'état de la session dans certains scénarios.
Ceci est juste mon interprétation:
Je vois que vous pouvez ajouter à Session
pendant la méthode d'action-après tout la Session est juste un dictionnaire vraiment. Cependant, la session n'est pas enregistrée à la fin.
Il semble qu'il devrait lancer une exception, mais peut-être que cette fonctionnalité est venue plus tard dans le framework, ils ont décidé de ne pas vérifier à chaque fois.
Les résultats peuvent également varier en fonction de l'état de stockage de session que vous utilisez (inproc / sql server).
Selon Patrick Y. Ng (ingénieur logiciel chez Microsoft ) qui a conçu et développé le moteur D'État de Session de ASP.NET:
Même si EnableSessionState est marqué en lecture seule, dans l'état InProc, l'utilisateur peut toujours modifier la session. La seule différence est que la session ne sera pas verrouillée pendant la requête. Cette limitation est par conception. Et je suis désolé que ce ne soit pas documenté dans MSDN.
Il y a beaucoup plus d'informations utiles sur état de la session dans ce post . Il est vraiment la peine de lire.