今天在用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片段可以使用正则表达式,如下:

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

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

 request.Headers.Add("Cookie", cookie); 

最新文章

  1. AEAI DP V3.6.0 升级说明,开源综合应用开发平台
  2. yii2实战教程之第一个Yii程序
  3. java关键字 super 和 this
  4. iOS - CAEmitterLayer流星
  5. putty配色方案
  6. C# winform版 nbtstat
  7. APICloud云修复再升级 增加热重启APP功能
  8. ZIP压缩文件夹中上个月的文件,并将备份文件拷贝到服务器
  9. HTML总结1
  10. Excel基于POI导入导出的Annotation化之路(一)
  11. 获取spring容器上下文(webApplicationContext)的几种方法
  12. js事件绑定函数
  13. MVC系列 引入MVC
  14. my项目的总结2015.8.26编
  15. [No0000E6]C# 判断与循环
  16. eval 用法
  17. webstocket 聊天
  18. logic:equal 标签的使用(转)
  19. box2d 易错
  20. 纯C++安卓开发 (ndk)系列之 ---- 常见问题

热门文章

  1. 分布式系统session一致性问题
  2. tomcat.apache startup.bat闪退两种解决方法
  3. 如何在maven中的项目使用tomcat插件
  4. python代码实现截图识字
  5. MARK 一条关于Linux 运维方面个人向收藏网址
  6. 转:Java后端面试自我学习
  7. 神经网络系列学习笔记(四)——神经网络之RNN学习笔记
  8. python--Pandas(一)
  9. PHP 基础知识总结
  10. JRE和JDK区别