【问题标题】:Is there danger of one user getting back results for another user because webmethods are Shared?由于 webmethod 是共享的,一个用户是否会为另一个用户取回结果?
【发布时间】:2026-02-06 00:25:01
【问题描述】:

我最近离开了 Ajax.dll 并开始使用 WebMethods。我读过共享函数是危险的,并且已经阅读了它们的原因。我想知道是否有任何使用 webmethod 经验的人可以告诉我是否有任何危险基于 Session 调用用户特定数据并将其返回给错误的用户,因为需要共享 WebMethod。我希望不会,但它一直在困扰着我。

<WebMethod(EnableSession:=True)> _
<ScriptMethod()> _
Public Shared Function GetSomething(ByVal SomeUserSpecificVariable As String) As String

 // Do something with HttpContext.Current.Session("UserID")

 Return something

End Function

【问题讨论】:

    标签: asp.net ajax vb.net shared webmethod


    【解决方案1】:

    我猜你指的是共享函数而不是实例函数。可能存在边缘情况,例如必须调用包含 web 方法的类的实例构造函数才能保存实例。在这种情况下,只有类的实例方法才是安全的。但这将是类实现的细节。

    当然,您永远不能将用户数据存储在类的共享成员中,因为每个用户都会访问同一个字段。但是,如果您 - 就像您的示例中提到的那样 - 仅访问使用特定机制(如 HttpContext.Current.Session)区分用户的服务,您会注意到很容易遇到这个错误。但同样,这种风险并非特定于使用共享函数,所以我的回答是“否”。

    【讨论】:

      最近更新 更多