1

我有一个具有以下方法的 ASMX Web 服务:

[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 会改变? 如何保持两者相同?

4

1 回答 1

2

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

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


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


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

于 2013-07-04T20:48:31.460 回答