我进行了以下简单的测试:
- 在 web.config 中,我们有:`sessionState timeout=40 mode=InProc`
- 在页面标记中设置了 `EnableSessionState = "ReadOnly"` 的空页面
- 代码背后:
protected void Page_Load(object sender, EventArgs e)
{
if (Session["dt"] == null)
Session["dt"] = DateTime.Now;
Session["dt"] = ((DateTime)Session["dt"]).AddYears(1);
Response.Write(Session["dt"].ToString());
}
并发回发的结果如下:
1- 13/11/2015 10:00:00 2- 13/11/2016 10:00:00 3- 13/11/2017 10:00:00 4- 13/11/2018 10:00:00 5- 13/11/2019 10:00:00 6- 13/11/2020 10:00:00 ...
这清楚地表明会话变量正在更新。在 MSDN 上,您可以找到以下内容:http: //msdn.microsoft.com/en-us/library/ms178581 (v=vs.100).aspx
您可以通过将会话状态模式设置为关闭来禁用应用程序的会话状态。如果您只想为应用程序的特定页面禁用会话状态,您可以将 @Page 指令中的 EnableSessionState 值设置为 false。EnableSessionState 值也可以设置为 ReadOnly 以提供对会话变量的只读访问。
我们几乎在应用程序的每个页面上执行读/写操作。但是,这会阻止同时为同一个客户端运行两个 http 请求。第一个请求应该完成,直到服务器处理第二个请求。经过一些研究,这显然是由于会话排他锁。出于好奇,我们尝试将会话状态设置为 ReadOnly,它似乎仍然可以编辑,没有定义独占锁。
问题:
1- Readonly 是否意味着 Readonly (所以这里的 asp 中有一个错误)还是别的什么?
2-只要会话似乎可以在 ReadOnly 状态下编辑,有什么可担心的,您认为在生产环境中继续使用它是否安全?
谢谢