• 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的方法使用

    clip_image001

    取出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 }

    clip_image002

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

    1 request.Headers.Add("Cookie", cookie); 
  • 相关阅读:
    将centos_yum源更换为阿里云(官方文档)
    JIRA 破解文件研究(Win 7环境)
    告别拖延症,你也可以轻松做到
    VS2015 + EF6连接MYSQL
    start-stop-daemon
    stm32开发板无法正常写入的问题或者写入后无法正常运行的问题
    进制转换
    回文判断程序
    C语言结构体指针的引用问题
    升级/安装主题插件提示权限不足 输入FTP解决办法
  • 原文地址:https://www.cnblogs.com/baiyangcao/p/5487408.html
Copyright © 2020-2023  润新知