1

这个问题的背景是我需要在(静态)WebMethod 中使用一些用户会话数据。我创建了一个引用我需要的数据的静态属性,如下所示:

private static UserWebSession UserWebSession
{
    get
    {
        return (UserWebSession)HttpContext.Current.Session["UserWebSession"];
    }
}

然后我可以在我的页面的静态 WebMethod 中调用它。

我的问题是,这种技术线程安全吗?或者这个属性的值是否会随着每个新的页面请求而更新 - 换句话说,它将返回最近请求页面的用户的 UserWebSession?

4

2 回答 2

3

很好 -HttpContext.Current正是为这类事情设计的。您不会获得以前用户的会话。

虽然它取决于线程(我相信) - 所以如果你启动任何额外的后台线程,他们将无法看到当前上下文。

另请注意,尽管此调用在不获取错误上下文方面是安全的,但当涉及到您对上下文的实际操作时,通常的并发警告适用。

于 2009-03-30T17:40:03.903 回答
0

我不知道页面方法能够访问会话状态。如果可以,那你可能没问题。我记得对 Session 状态的访问是序列化的,因此对于给定的会话,一次只能到达一个请求。

于 2009-03-30T17:45:59.617 回答