如题
这是网上找的的请求类:http://zhoufoxcn.blog.51cto.com/792419/561934
之前我用这个方法,咋就获取不到ASP.NET_SessionId呢?请高手指点!
查了些资料,提到可以用CookieContainer来获取,试了下,还是不行,哪位能给个demo不?跪求!
刚刚搜索了下,和这个贴问题一样
http://bbs.csdn.net/topics/200045532
、
(this.Session.Contents).SessionID 要取这个吗?
是取这个,但是不是这样取,是在客户端取
@寕: 先输出到客户端 再从客户端取呗
@sym_cn: <input type="text" name="sessionId" value="<%=request.getSession().getId()%>" />
@sym_cn: 通过HttpWebRequest发送请求后,HttpWebResponse响应来咋取?
@寕: WinForm? 还是WebForm
@sym_cn: winform
@寕: 留下你的邮箱我发给你 Demo
@sym_cn: 869008813@qq.com
@寕: OK
@sym_cn: 谢谢你的demo,但是,demo里在page_load事件输出了ASP.NET_SessionId,我想要是模拟登录,得到ASP.NET_SessionId的值
@寕: 你是说 想取到 没有输出的 ?
@sym_cn: 想在客户端取到ASP.NET_SessionId的值,但是,你给的demo里包含了服务端和客户端。
@寕: 服务端是别人的对吧
String session=""; HttpWebResponse myresponse; try { myresponse = (HttpWebResponse)myrequest.GetResponse(); } catch (WebException ex) //得到sessionid!!! { WebResponse res = ex.Response; session = res.Headers["Set-Cookie"]; session = session.Substring(0, session.IndexOf(";")); }
@寕:
@sym_cn: 刚刚搜索了下,和这个贴问题一样
http://bbs.csdn.net/topics/200045532
@寕: 不一样吧 你不是要取得Session
@sym_cn: 现在模拟登录不成功,取不了ASP.NET_SessionId
@寕: 服务器没放出来 应该取不到。
@sym_cn: 晕倒,请求aspx页面,要加上VIEWSTATE,而且还得编码!这。。。
IDictionary<string, string> parameters = new Dictionary<string, string>(); parameters.Add("__VIEWSTATE", System.Web.HttpUtility.UrlEncode(viewState, Encoding.UTF8)); parameters.Add("__EVENTVALIDATION", System.Web.HttpUtility.UrlEncode(eventValidation, Encoding.UTF8));
不编码,还报
Invalid length for a Base-64 char array.
这个错,哎今天总算有点头绪了!
@寕: 不是这样的。在get请求的时候是没问题的。如果是模拟点击页面里面的按钮会存在此问题。 你取到ViewState里面只是 界面控件呼叫后台的一些注册而已。 里面没有session。
@sym_cn: 我现在请求一个用asp.net控件做的登录,用fiddler调试,返回如图的结果了,但是cookie里没有东西
@寕: 你请求的结果很明显了 后台 有某些判断 Response.write("<script>window.location.replace('/login.aspx')</script")。 应该是判断Session了。
你通过WInform 增加个webbrowser控件。 隐藏起来 在 webborowser里面控制这样可行吗?
@sym_cn:如果是这样的话,可能是验证码的问题了,因为请求字段都没问题,唯独验证码漏掉了,你觉得呢?
if (Session["CheckCode"] != null && Session["CheckCode"].ToString() != ""){ 。。。。。。。。。。。。。。。。。。。。。 }else{ Response.Write("<script language='javascript'>window.location.replace('/login.aspx')</script>"); }
@sym_cn: 哎,问题终于解决了,原来是用get方式请求验证码页面时,CookieContainer cookieContainer = new CookieContainer();这个东西没加进去,导致验证码验证失败!
多谢了!!!
在请求响应头的set-cookie里
响应头里没有set-cookie咋办?
@寕:
没有就取不到,只有服务器发送了才有,服务器对session或cookie操作了才会产生sessionid
@向往-SONG:但是, 我用Fiddler抓包,又可以抓到ASP.NET_SessionId。
@寕:
那可能是你程序请求的页面不对,比如你要模拟登陆后才会产生sessionid。
@向往-SONG:
刚刚模拟了一个登录,结果是和正常访问请求页一样的效果,以为是模拟提交表单时,字段错误,抓包一看,没错,然后,想想是否是提交的处理页不对,然后用firebug测试下,处理页是对的,这是到底咋回事呢?
@寕:
请求的是哪个网站登录?一般网站只要表单字段对了应该就能登录上,有的安全性高的就不一定了。
@向往-SONG: 用asp.net控件写的一个登录页,
@向往-SONG:
刚刚搜索了下,和这个贴问题一样
http://bbs.csdn.net/topics/200045532
@寕:
你的也是请求的qq那个登录的?他那个是没有完全模拟浏览器信息,具体要分析他页面的请求和响应信息。
@向往-SONG:只是请求的url不同,但是所描述的问题一样
@寕: 请求一个用asp.net控件做的登录,用fiddler调试,返回如图的结果了,咋办?给个思路吧
@寕:
这是没登录成功吧?怎么会用JS来跳转。。。
只要你完全模拟了浏览器的请求肯定是没问题的,可能你哪里漏了吧。
@向往-SONG: 难道这是aspx执行这段js后准备进行回传?
@向往-SONG: 哎,问题终于解决了,原来是用get方式请求验证码页面时,CookieContainer cookieContainer = new CookieContainer();这个东西没加进去,导致验证码验证失败!
多谢了!!!
Request.cookies
客户端也可以通过JS来获取cookie
Request.cookies
客户端也可以通过JS来获取cookie
seission需要Cookie
mark记录下