Je suppose que si le contrôleur a l'attribut SessionStateBehavior.ReadOnly
, je ne peux pas modifier les variables de session à l'intérieur de ce contrôleur , Mais je peux modifier les valeurs.
J'essaye ce code
[SessionState(System.Web.SessionState.SessionStateBehavior.ReadOnly)]
public class GLobalController : Controller
{
public ActionResult Index()
{
Session["xxx"] = DateTime.Now.ToString();
return View();
}
see Ecrire dans une session en lecture seule dans MVC 3+
Ce message affirme que le comportement est incohérent. Je peux certainement écrire dans Session in Controllers avec ReadOnly.
Je le traiterais comme ceci:
Je réalise que cela va à l’encontre de http://msdn.Microsoft.com/en-us/library/system.web.sessionstate.sessionstatebehavior.aspx
L'état de session en lecture seule est activé pour la demande. Cela signifie que l'état de la session ne peut pas être mis à jour.
mais il semble que vous puissiez réellement mettre à jour l'état de la session dans certains scénarios.
Selon Patrick Y. Ng (ingénieur logiciel chez Microsoft) qui a conçu et développé le moteur Session State de ASP.NET:
Même si EnableSessionState est marqué en tant que ReadOnly, 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 demande. Cette limitation est de par leur conception. Et je suis désolé que ce ne soit pas documenté dans MSDN.
Il y a beaucoup plus d'informations utiles sur l'état de session dans ce post . Cela vaut vraiment la peine d'être lu.
Ceci est juste mon interprétation:
Je vois que vous pouvez ajouter à Session
au cours de la méthode d'action. Après tout, Session n'est qu'un dictionnaire. Cependant, la session n'est pas enregistrée à la fin.
Il semble bien que cela devrait constituer une exception, mais peut-être puisque cette fonctionnalité est apparue plus tard dans le cadre, ils ont décidé de ne pas vérifier à chaque fois.
Les résultats peuvent également varier en fonction du stockage d’état de session que vous utilisez (serveur inproc/sql).