我希望如果控制器具有属性SessionStateBehavior.ReadOnly
,那么我无法更改此控制器内的会话变量
但我可以改变价值观。
我试试这段代码
[SessionState(System.Web.SessionState.SessionStateBehavior.ReadOnly)]
public class GLobalController : Controller
{
public ActionResult Index()
{
Session["xxx"] = DateTime.Now.ToString();
return View();
}
答案 0 :(得分:28)
请参阅Writing to a read only session in MVC 3+
该帖子声称行为不一致。 我绝对能够使用ReadOnly写入控制器中的Session。
我会这样对待它:
我意识到这与http://msdn.microsoft.com/en-us/library/system.web.sessionstate.sessionstatebehavior.aspx
相反为请求启用了只读会话状态。这意味着无法更新会话状态。
但实际上你似乎可以在某些情况下更新会话状态。
答案 1 :(得分:1)
根据Patrick Y. Ng(Microsoft的软件工程师)设计和开发了ASP.NET的会话状态引擎:
即使EnableSessionState被标记为ReadOnly,在InProc状态下,用户仍然可以修改会话。唯一的区别是会话将不会在请求期间被锁定。此限制是设计使然。很抱歉,它没有在MSDN中记录。
this post中有更多有关会话状态的有用信息。真的值得一读。
答案 2 :(得分:0)
这只是我的解释:
我看到你可以在动作方法中添加Session
- 所有Session真的只是一个字典。但是会话最后没有保存。
它似乎应该抛出一个异常,但也许因为这个功能后来发布到框架中,所以每次都决定不进行检查。
结果也可能因您使用的会话状态存储(inproc / sql server)而异。