博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HttpWebRequest调用WebService后台需要Session信息问题的解决办法
阅读量:4600 次
发布时间:2019-06-09

本文共 1048 字,大约阅读时间需要 3 分钟。

今天在用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);

 

转载于:https://www.cnblogs.com/baiyangcao/p/5487408.html

你可能感兴趣的文章
记录:学习中遇到的错误
查看>>
部署Node.js项目(CentOS)
查看>>
linux设备模型之spi子系统
查看>>
编程题
查看>>
不能在此路径中使用此配置节。如果在父级别上锁定了该节,便会出现这种情况...
查看>>
tf Dataset API
查看>>
js中按钮控制显示隐藏以及下拉功能
查看>>
Intent
查看>>
波涛 - 证券期货投资计算机化技术分析原理(2013年3月19日)
查看>>
sqlserver存储过程中sql语句连接及datetime字段的处理
查看>>
JavaScript 测试和捕捉
查看>>
高级软件工程第二次作业——个人项目实战:数独
查看>>
Kafka主要配置
查看>>
PHP开发经验总结
查看>>
Leetcode 400. Nth digits
查看>>
pycharm 中 ‘unicodeescape’ codec can’t decode bytes in position XXX: trun错误解决方案背景描述...
查看>>
三次握手 四次回收流程图
查看>>
第四次实验作业
查看>>
挖矿call
查看>>
第二次站立会议1
查看>>