即使 EnableSessionState="ReadOnly" 也会设置 asp.net 变量

Posted

技术标签:

【中文标题】即使 EnableSessionState="ReadOnly" 也会设置 asp.net 变量【英文标题】:asp.net variable setted even if EnableSessionState="ReadOnly" 【发布时间】:2012-07-04 04:57:39 【问题描述】:

我有一个设置了指令 EnableSessionState="ReadOnly" 的页面。

当我有:

this.Session.Add("MyVar","TempVar");

下一个请求返回NULL

当我有:

this.Session["MyVar"] = "TempVar";

下一个请求返回“TempVar”

我可以禁用此行为吗?

【问题讨论】:

你想要它只用于这个页面还是整个 webapp? 只有这一页。我无法理解为什么使用“添加”将项目添加到集合中只是暂时的,而将项目设置为“全局” 希望以下链接对您有很大帮助http://***.com/questions/4506273/make-session-readonly-on-asp-net-programmatically-enablesessionstate-readonlyhttp://forums.asp.net/t/1375468.aspx/1 "我有一个页面设置了指令 EnableSessionState="ReadOnly"。"所以我必须有这一行:'' 我的问题是当我做 'Session["A"] = "B";'我不希望在下一个请求中出现 'Session["a"] == "B"'。我希望在下一个请求中使用 'Session["a"] == null'。当我写 'Session.Add("a")' 时,它的行为是我所期望的 在 ASP.NET 论坛中,它提到它只是一个内存写入并且值不会添加到状态包中,这意味着您将在第二页中获得原始值 【参考方案1】:

之所以这样做是因为 Session[""] 正在使用 get;set; 访问数组。显然未设置为检查 enablesessionstate 的访问器。所以基本上它被放入了那个数组,但它没有被保存。与 .Add() 函数相反,它显然有检查。它可能是为了减少 get;set; 的开销。属性。

正如其他人所说,您可能会在同一个请求中看到它,但它没有保存到会话中。

【讨论】:

我的结论完全正确。我无法确认 Trow 反射器

以上是关于即使 EnableSessionState="ReadOnly" 也会设置 asp.net 变量的主要内容,如果未能解决你的问题,请参考以下文章

只有在配置文件或 Page 指令中将 enableSessionState 设置为 true 时,才能使用会话状态...

只有在配置文件或 Page 指令中将 enableSessionState 设置为 true 时,才能使用会话状态。还请确保在应用程序配置的 // 节中包括 System.Web.SessionSta

pages与页面配置

ASP .NET 检查会话

域名ping不通是啥原因

简单队列