请教:
现在用c#客户端请求服务(windows应用程序),使用session登陆
设置了public System.Net.CookieContainer对象保存session的id
在同一服务页面(asmx)可以取回设置的session
但是在请求第二个服务页面的时候怎么也取回不了session
而且用cook.Count属性取回的数量cook有2个,不知怎么解决
(使用ie测试服务的时候可以取回session值)
大家一定要帮忙啊!
---------------------------------------------------------------
因为SESSION是跟会话有关的。
在使用浏览器进行WEBSERVICE访问时,浏览器会自动的把对应的SESSION数据提交到WEBSERVICE,这样WEBSERVICE就有机会获得上次调用时的SESSION值了。
而在WINDOWS应用中,一般的应用是不具备上传SESSION的功能的,所以会出现你说的问题。
解决:
1——
有一个办法在请求的时候,把SESSION内容一起附带进去,但要实现低层的SOCKET开发
2——
把SESSION传递给WEBSERVICE,自己解析SESSION加密的数据(应该有这样的方法,但我不知道)
3——
把SESSION放到数据库中或别的地方而不使用COOKIE看WIN应用能否提交一致的SESSIONID
4——
在WIN应用中不要使用两步走的方法,而是一步到位:
同时把Login数据和GetSearchResult一起提交,由WebService执行时先执行LOGIN后执行GetSearchResult实现。
当然,这个处理方法需要对LOGIN信息进行加密处理。
5——
当访问WEBSERVICE的时候,创建一个GUID,每次都把这个GUID进行来回传输,通过GUID来识别有效性。但要设置好GUID值的有效期,特别是访问连接信息,否则很步安全
---------------------------------------------------------------
ASP.NET都把session的ID放在session cookie里(asp.net_sessionID),然后夹在response中发送到客户端; 客户端在发送request时候也会把这个sessionid附带送到server, server收到session的信息之后会将其放在session collection用于以后的交流.
所以, 客户端没有cookieContainer是不行地:)