从WebService的SessionID说起
在Chating的Blog中有个公司的面试题,是如何在WebService中使用Session。到CSDN的原贴看了看,翻到了后面第3页,发现了回答。将EnableSession设为True是可以的。
但是问题远比想的复杂,在本机调试的时候得到的SessionID是固定的,换了一下机器请求一次得到一个不同的SessionID。
尝试着把Web.Config的配置改了一下(将cookieless设置为true)。
问题同样没有解决。
最后我曲线救国完成了功能,但也已经不是Session了。
在数据库里新建一个表,保存Session信息。用户登陆的时候分配一个会话ID,放在表里。在每个WebMethod中都加一个参数,用来传递这个ID,然后再数据库里查找需要的东西。最后在用户注销的时候再把数据库里相应行删除。
enjoyit-zwg的解决方案:
每次请求的SessionId都是不同的,但是可以通过设置Web服务代理的CookieContainer属性来使多次调用在同一个SessionlD。
<System.Web.Services.WebMethod(EnableSession:=True)> _
Public Function ConvertTemperature() As String
Return Session.SessionID
End Function
Public Function ConvertTemperature() As String
Return Session.SessionID
End Function
尝试着把Web.Config的配置改了一下(将cookieless设置为true)。
<!-- 会话状态设置
默认情况下,ASP.NET 使用 Cookie 来标识哪些请求属于特定的会话。
如果 Cookie 不可用,则可以通过将会话标识符添加到 URL 来跟踪会话。
若要禁用 Cookie,请设置 sessionState cookieless="true"。
-->
<sessionState
mode="InProc"
stateConnectionString="tcpip=127.0.0.1:42424"
sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes"
cookieless="false"
timeout="20"
/>
默认情况下,ASP.NET 使用 Cookie 来标识哪些请求属于特定的会话。
如果 Cookie 不可用,则可以通过将会话标识符添加到 URL 来跟踪会话。
若要禁用 Cookie,请设置 sessionState cookieless="true"。
-->
<sessionState
mode="InProc"
stateConnectionString="tcpip=127.0.0.1:42424"
sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes"
cookieless="false"
timeout="20"
/>
最后我曲线救国完成了功能,但也已经不是Session了。
在数据库里新建一个表,保存Session信息。用户登陆的时候分配一个会话ID,放在表里。在每个WebMethod中都加一个参数,用来传递这个ID,然后再数据库里查找需要的东西。最后在用户注销的时候再把数据库里相应行删除。
enjoyit-zwg的解决方案:
每次请求的SessionId都是不同的,但是可以通过设置Web服务代理的CookieContainer属性来使多次调用在同一个SessionlD。