我有一个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会改变?如何保持两者不变?
发布于 2013-07-04 20:48:31
你有没有想过在每一种情况下都会打电话到哪里?在服务器端调用时,您将从服务器调用到自身,从而创建一个新会话,而在另一种情况下,您使用的是同一个客户端,因此会话在这种情况下不会改变。
如果您需要更清楚地描述这一点,请从web服务的角度来看待这个问题。在一种情况下,客户端是web浏览器,而在另一种情况下,客户机本身就是web浏览器,这是不同的,因此应该更改SessionID。
假设服务器有一个很好的理由来查询自己,我可能会考虑在webservice中添加一个参数,该参数可以允许某些数据被共享,否则就可以劫持会话。
如果web服务和aspx页面位于同一服务器上,那么web服务访问的任何功能都可以在网页后面的代码中直接访问。您可以将web服务中的"DoWork“方法的逻辑放入一个DLL中,web页和web服务都可以访问该DLL,这将不允许对SessionID进行任何更改,因为在请求时会向同一个客户端提供服务。
https://stackoverflow.com/questions/17477871
复制相似问题