为什么SessionID不同

本文关键字:不同 SessionID 为什么 | 更新日期: 2023-09-27 18:21:17

我有一个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被更改?如何保持两者相同

为什么SessionID不同

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

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


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


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