HttpWebRequest调用WebService后台需要Session信息问题的解决办法

今天在用HttpWebRequest调用后台ASP.NET 的WebService方法时遇到了一个问题,后台的WebService方法里使用到了Session对象中的用户信息,而Session对象中的用户信息是在登录时设置,介于小生此次仅是调用了一个WebService,并没有从Web页面登录,故没有Session信息而报错。

WebService的方法不能更改,所以我决定模拟登录,先调用一个登录的WebService,设置好Session信息,然后再调用目标WebService即可获得Session信息,那么问题来了,后台服务是如何判断两个HTTP请求是来自同一个客户端,而使用同一个Session对象呢?来自同一星星的就可以吗?

显然不是,通过使用Fiddler抓包可以看到在首次HTTP请求的Response中可以看到有Set-Cookie语句,设置客户端的Cookie值,其中含有一个ASP.NET_SessionId=XXXXXX;的Cookie值,这个就是用来标识客户端的SessionId,再次发起HTTP请求时包含这个Cookie值,后台服务就可以根据这个SessionId取出之前设置的Session信息,供WebService的方法使用

取出Response的Header中的ASP.NET_SessionId片段可以使用正则表达式,如下:

 1 // 处理cookie
 2 string setcookies = response.Headers.Get("Set-Cookie");
 3 if (!string.IsNullOrEmpty(setcookies))
 4 {
 5     Regex seesionidRegex = new Regex("(ASP.NET_SessionId=[0-9a-zA-Z]+;)");
 6     if (seesionidRegex.IsMatch(setcookies))
 7     {
 8         cookie = seesionidRegex.Match(setcookies).Value;
 9     }
10 }

再次发起Http请求时用获取的cookie设置Request的Header中的Cookie值,如下:

1 request.Headers.Add("Cookie", cookie); 
时间: 2024-09-30 19:44:04

HttpWebRequest调用WebService后台需要Session信息问题的解决办法的相关文章

vs2008调用opencv2.4.9的imread()函数失败解决办法

这两天在看opencv的C++接口函数,刚开始就出现问题: 一个简单的显示图像的程序,就是运行不成功: #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <string> using std::string; using namespace cv; int main() { string str="E:\\test\\LENA.BMP";

C#Session丢失问题的解决办法

关于c# SESSION丢失问题解决办法 我们在用C#开发程序的时候经常会遇到Session很不稳定,老是数据丢失.下面就是Session数据丢失的解决办法希望对您有好处. 1.在WEB.CONFIG文件中修改SESSION状态保存模式,如:<sessionState mode='StateServer' stateConnectionString='tcpip=127.0.0.1:42424' sqlConnectionString='data source=127.0.0.1;Trusted

遇到百度网址安全中心提醒您该页面可能存在钓鱼欺诈信息的处理解决办法

2018年8月份初正值炎热酷暑的夏天,我们sine安全公司接到新客户的安全反映,说是他们公司网站首页标题被×××篡改成×××的内容,导致网站在百度搜索里红色风险提示,百度快照搜索关键词显示:百度网址安全中心提醒您:该页面可能存在钓鱼欺诈信息!而且网站在百度收录里,收录了许多×××,×××内容的百度快照,直接导致网站被主机服务商,给拦截阻断提示,直接打不开网站了,要求该客户自行检查网站的内容以及违规内容生成的文件和目录. 网站收录图片如下: 网站的用户搜索公司产品关键词的时候,直接搜索显示:百度网

tomcat重启后session没有清除的解决办法

tomcat的默认设置是:用户保存的session信息会持久到到硬盘中,即使重启tomcat,这些session信息也不会丢失. 如果希望重启tomcat,清除所有session信息,可以修改tomcat的context.xml配置文件,去掉 <Manager pathname="" /> 和 <Valve className="org.apache.catalina.valves.CometConnectionManagerValve" />

android 当ListView滚动时自动调用 onCheckedChanged 导致CheckBox 状态不停变化 的解决办法

今天在做一个含有CheckBox 的ListView时,发现当初始化CheckBox的状态后, 滚动ListView,其中CheckBox 的选中状态不停的发生变化.最后发现原因是 ListView滚动时自动调用 onCheckedChanged 导致的.在查看了各种博客的解决办法后,国外的网站上有一个办法解决了我的问题.写下来分享一下. 在自定义Adapter的getView方法中这样写就行了. Java代码   //在初始化CheckBox状态和设置状态变化监听事件之前,先把状态变化监听事件

通过HttpWebRequest调用webService

调用远端接口关键方法如下: public object InsertAuditLog(string loginLog) { //Wsdlxml(loginLog)返回wsdl的xml byte[] bs = Encoding.UTF8.GetBytes(Wsdlxml(loginLog)); HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create("http://10.109.209.90:21010/gather/service

.net 项目 调用webservice 出错,异常信息:对操作“xxx”的回复消息正文进行反序列化时出错。解决方案。

项目运行好好的,增加并更新WebService后,出错,捕获异常信息为:对操作“xxx”的回复消息正文进行反序列化时出错.解决方案. 认真分析异常信息后,得到关键提醒: {"读取 XML 数据时,超出最大名称表字符计数配额(16384).名称表是用于存储在处理 XML 时所遇到的字符串的数据结构 - 具有非重复元素名称.特性名称和特性值的长 XML 文档可能会触发此配额.通过更改在创建 XML 读取器时所使用的 XmlDictionaryReaderQuotas 对象的 MaxNameTable

HttpWebRequest调用webservice

1 public string GetCostWebservide() 2 { 3 string uri = "http://125.77.254.142:8011/WXService.asmx/GetCost"; 4 HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(uri); 5 string param = String.Empty; 6 param += String.Format("

跨越请求,关于后端session会话丢失的解决办法(转载)

目前使用前后端分离的模式开发,后端提供跨域接口.前端jsonp调用,绑定数据,但是在该站点下有个人中心模块存在的情况下,服务端的session会话会被跨域请求覆盖改掉 大家都知道tomcat使用cookie中jsessionid来区分客户端session会话 跨域请求接口恰恰有时候响应回来回改变该站点下的jsessionid值,导致服务器每次判断都是一个新的会话 以网站个人中心模块来说,每一个跨域jsonp请求,都会Response 一个cookie值,SET-COOKIE:JSESSIONID