【问题标题】:Why SessionID is different?为什么 SessionID 不同?
【发布时间】:2013-07-02 21:45:50
【问题描述】:

我有一个 ASMX 网络服务,方法如下:

[WebMethod(Description = "Test", EnableSession = true)]
public string DoWork(string param)
{
   string user = Session["user"].ToString();
}

当我使用 AJAX 从客户端调用此方法时,SessionId 保持不变(对于 aspx 页面和 Web 服务),但是当我从服务器端代码调用此方法时(在按钮单击事件上)SessionId 会发生变化:

ServiceReference1.MyServiceSoapClient obj = new ServiceReference1.MyServiceSoapClient();
string user=Session["user"];
obj.DoWork("Test string"); 

为什么会更改 SESSIONID? 如何保持两者相同?

【问题讨论】:

    标签: c# asp.net web-services session


    【解决方案1】:

    您是否考虑过在每种情况下您从哪里拨打电话?在服务器端调用中,您是从服务器调用自身,因此这会创建一个新会话,而在另一种情况下,您使用的是相同的客户端,因此在这种情况下会话不会改变。

    如果您需要更清楚地了解这一点,请从 Web 服务的角度来看。在一种情况下,客户端是 Web 浏览器,而在另一种情况下,客户端是自身,这是不同的,因此应该更改 SessionID。


    假设您有充分的理由让服务器自行查询,我可能会考虑向 Web 服务添加一个可以传递的参数,以允许共享某些数据,否则您将拥有的能力劫持会话。


    如果 web 服务和 aspx 页面在同一台服务器上,那么 web 服务访问的任何功能都可以直接在 web 页面后面的代码中访问。您可以将 Web 服务中的“DoWork”方法的逻辑放入网页和 Web 服务都可以访问的 DLL 中,并且不允许更改 SessionID,因为在同一客户端上提供服务请求。

    【讨论】:

    • 好的,那我怎样才能让它们保持不变呢?
    • @user1390378 为什么要让服务器通过设计为面向外部的 API 的 SOAP 调用来调用自己的代码?如果代码已经在服务器端运行,为什么不直接调用预期的函数呢?
    • @MerickOWA:你能举个例子吗?
    猜你喜欢
    • 1970-01-01
    • 2010-09-21
    • 2014-11-03
    • 2012-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-13
    • 2020-04-27
    相关资源
    最近更新 更多