首先,我有一个A站点为:test.home.com,我有B站点登录需要的用户名与密码。比如说,B站点的登录页为www.cnblogs.com
我现在用HttpWebRequest进行post请求,返回的response已经可以取到登录成功后跳转的页面的源码,证明已经通过验证了。然后,我在后台用Response.Redirect()到需要身份验证的页面。结果是,让我登录。
为什么我已经登录了,还要再让我登录呢。网上说,是因为服务器端的cookie和客户端的cookie不一致造成的。可是我用Response.Cookies.Add将我得到的Cookie。如,ASP.NET_SessionID等已经加到了客户端。但是还是不行。
在这里,我想请问一下大侠们,我该如何才能实现用post自动登录成功后,IE自动跳转到登录成功后的页面。
这里有一个不好的地方就是,B系统没有任何接口,我也没有B系统的源代码,也就是所,对B系统的登录进行改造是不可能的了。
或者说,我这个思路从最开始就是错的?还请各位高人指点一二。
另外,hao123的那个登录各邮箱的功能,是那些邮箱网站提供了相应的接口,hao123才实现那种功能的么。
"我现在用HttpWebRequest进行post请求,返回的response已经可以取到登录成功后跳转的页面的源码,证明已经通过验证了。"你这做的这件事其实hao123那种登录方式,只不过hao123登录到邮箱后就停留到邮箱所在的那个站点了,所以可以成功啊。
你完成了第一步登录,第二步再重定向到B站点,是两步没有任何关联的操作。cookie的环境早已经发生变化,即使cookie的值是一样的。服务器cooike,也就是session吧,本质上也是依赖于客户端cookie的值来识别的,基于查询的session很少见了,所以应该是不会成功的。
呃,这样说来的话,我这种方式是没可能成功了么。。。
至于hao123的那种方法我也试过,我自己做了一个form,用于提交用户名和密码到163的登录页面。不过163的登录界面会提示,是从不合法的登录页面进行登录的,不让登录。所以我在想163应该有对外的接口,不知这么理解是否正确
@八月神释: 大部分防止crsf攻击的网站都会更改或验证被hash过的cookie,所以你这种直接构造cookie的方法是不可靠的。你两步操作的环境已经变化。
@Zigzag: csrf,写错了
1.是不是我理解错了,你登录了B站点对A站点有什么影响??,A站点当然不会验证通过啊
2.hao123那些邮箱登录原理很简单,就是把用户名和密码POST对应的邮箱登录地址就可以了.
这种方法我也试过,我自己做了一个form,用于提交用户名和密码。不过163的登录界面会提示,是从不合法的登录页面进行登录的,不让登录。
"返回的response已经可以取到登录成功后跳转的页面的源码",能解析到URL吗、应该跳转到这个页面
能解析到,不过跳到目标页面时(我用的Response.Redirect),还是会提示让我登录
A站点通过B站点进行验证,表示A站点可以得到Session,但B并没有啊?
我想也是,我能够得到的只是ASP.NET_SessionID,这个应该是会话Session,并不是用于用户验证的Session
@八月神释: 不对吧,登陆的session就是会话的session吧,登陆前session["user"]=null,登陆后session["user"]=CurrentUserID,验证session["user"]==null就知道当前是否正确登陆了.
你是不是在a的页面下用HttpWebRequest 请求b站点,请求成功然后定向到b站点下的某个需要验证的页面? 这样登录跟浏览器请求登录不一样的
就结果来看的话,肯定是不一样的。我自己制作了一个form表单进行数据的提交也是不行的,这种方式果然还是不行么。看来得换个思路了,或者说,这个功能只能砍掉了。
可以使用session来传值,在再次调用的时候判断一下session的值是否存在,然后就可以正确的登陆了
不要用Redirect(),直接Response.Write("<script>window.location.href='www.cnblogs.com';</script>");
输出一段客户端脚本,在客户端重定向。
这种方式也试过了。。。。。。还是不行
Cookie的Domain问题。。。。
我已有同样的问题,就请教
楼主,你现在用这种方式实现了么,我现在正遇到了这个问题,没什么思路了