控制器SessionStateBehavior是ReadOnly,我可以更新会话变量

use*_*234 28 asp.net asp.net-mvc session-variables

我希望如果控制器具有属性,SessionStateBehavior.ReadOnly那么我无法更改此控制器内的会话变量,但我可以更改值.

我试试这段代码

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

tur*_*ose 30

请参阅写入MVC 3+中的只读会话

该帖子声称行为不一致.我绝对能够使用ReadOnly写入控制器中的Session.

我会这样对待它:

  • 必需表示您正在请求会话的独占锁定(即不对同一会话ID的请求进行并行处理)
  • ReadOnly意味着您正在请求会话的非独占锁定(即您的请求仍然必须等待具有独占锁定的请求才能完成,但您可以并行处理具有非独占锁定的请求.但是,您需要确保您的代码不会写入Session.它不一定由框架强制执行)

    我意识到这与http://msdn.microsoft.com/en-us/library/system.web.sessionstate.sessionstatebehavior.aspx背道而驰

    为请求启用只读会话状态.这意味着无法更新会话状态.

    但实际上你似乎可以在某些情况下更新会话状态.


    pit*_*ity 6

    根据设计和开发ASP.NET 的会话状态引擎的Patrick Y. Ng(Microsoft的软件工程师)所说:

    即使EnableSessionState被标记为ReadOnly,在InProc状态下,用户仍然可以修改会话。唯一的区别是会话将不会在请求期间被锁定。此限制是设计使然。很抱歉,它没有在MSDN中记录。

    这篇文章中有关于会话状态的更多有用信息。确实值得一读。