我进行了以下简单的测试:
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
...
这清楚地表明 session 变量正在更新。在 MSDN 上,您可以找到以下内容:
http://msdn.microsoft.com/en-us/library/ms178581(v=vs.100).aspx
You can disable session state for an application by setting the session-state mode to Off. If you want to disable session state for only a particular page of an application, you can set the EnableSessionState value in the @ Page directive to false. The EnableSessionState value can also be set to ReadOnly to provide read-only access to session variables.
我们几乎在应用程序的每个页面上执行读/写操作。但是,这会阻止同时为同一个客户端运行两个 http 请求。第一个请求应该完成,直到服务器处理第二个请求。经过一些研究,这显然是由于 session 排他锁。出于好奇,我们尝试将 session 状态设置为 ReadOnly,它似乎仍然可以编辑,没有定义独占锁。
问题:
1- Readonly 是否意味着 Readonly (所以这里的 asp 中有一个错误)还是别的什么?
2-只要 session 似乎可以在 ReadOnly 状态下编辑,有什么可担心的,您认为在生产环境中继续使用它是否安全?
谢谢
最佳答案
这个问题看起来很老,但是有很多观点。只是想向使用只读 session 状态并从 InProc 切换到 SQLServer session 的人发出警告。
虽然您仍然可以在 session 为只读时(不会出现异常)将内容放入 session 中,但在使用 SQLServer session 时,这些更改是 不是 当页面完成它的事情时,提交给数据库。
所以下一页将不是 查看您对 session 的更改,如果您以前将 session 作为 InProc 并期望它看到更改,这可能会导致奇怪的副作用。
关于ASP.Net 只读 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26905032/