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();
        }
23
demandé sur hims056 2012-09-04 16:02:52

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:

  • requis signifie que vous demandez un verrou exclusif sur la Session (c'est-à-dire pas de traitement parallèle des demandes pour le même sessionID)
  • {[8] } readonly signifie que vous demandez un verrou non exclusif sur la Session (c'est-à-dire que votre demande doit toujours attendre les demandes avec un verrou exclusif pour terminer, mais vous pouvez traiter les demandes avec des verrous non exclusifs en parallèle. Cependant, il vous appartient de vous assurer que votre code n'écrit pas dans la Session. Ce n'est pas nécessairement appliqué par le cadre)

    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.

    27
    répondu turnhose 2017-05-23 12:02:37

    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).

    0
    répondu Simon_Weaver 2017-11-27 09:14:56

    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.

    0
    répondu piter entity 2018-08-03 08:26:47