mag*_*tic 22 c# asp.net session thread-safety
考虑用户同时发出多个请求,是否必须锁定与Session一起使用的所有代码?
例如,如果我有以下场景,在浏览器的一个选项卡中,用户打开一个页面,在第二个窗口中他退出.
要求1:
if(Session["user"] != null)
lblName.Text = Session["user"].Name;
Run Code Online (Sandbox Code Playgroud)
要求2:
if(logout)
Session["user"] = null;
Run Code Online (Sandbox Code Playgroud)
在访问Name属性时,Request 1是否可能抛出NullPointerException?我是否需要锁定请求1中的代码,以确保用户在检查null后仍然存在?或者ASP.NET是否以某种方式自动处理?
Dre*_*rsh 15
对于同一会话的ASP.NET应用程序的两个请求(处理程序不使用IReadOnlySessionState标记接口或EnableSessionState="ReadOnly"为页面打开)将由ASP.NET运行时序列化以保证状态的一致性.因此,如果您有两个能够写入会话状态的页面,无论客户端做什么,它们都将被串行访问.
无论页面/处理程序是否要写入会话状态,您的应用程序代码都可以通过相关的技术向ASP.NET发出信号.如果不这样做,所有请求都将被序列化,并且Web应用程序的性能将受到影响.
Pet*_*man 10
一如往常,答案取决于"安全"的含义.在ASP .NET中,每个请求都可以独占访问其会话状态.这意味着您不必担心在单个请求的范围内同步访问.如果Session ["user"]为非null,则在当前请求的整个持续时间内它将为非null.在您的示例中,请求1将永远不会抛出空引用异常.
| 归档时间: |
|
| 查看次数: |
8773 次 |
| 最近记录: |