首页新闻找找看学习计划

.net post自动登录后跳转页面

0
悬赏园豆:200 [已解决问题] 解决于 2012-07-20 15:24

首先,我有一个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才实现那种功能的么。

问题补充:

已经联系那个系统的开发商,让他们提供一个可登录的接口。看来单方面的想要登录后并自动跳转页面这种方式,实现起来并不是这么简单的。

八月神释的主页 八月神释 | 初学一级 | 园豆:11
提问于:2012-07-13 17:38
< >
分享
最佳答案
0

"我现在用HttpWebRequest进行post请求,返回的response已经可以取到登录成功后跳转的页面的源码,证明已经通过验证了。"你这做的这件事其实hao123那种登录方式,只不过hao123登录到邮箱后就停留到邮箱所在的那个站点了,所以可以成功啊。


你完成了第一步登录,第二步再重定向到B站点,是两步没有任何关联的操作。cookie的环境早已经发生变化,即使cookie的值是一样的。服务器cooike,也就是session吧,本质上也是依赖于客户端cookie的值来识别的,基于查询的session很少见了,所以应该是不会成功的。

收获园豆:25
Zigzag | 初学一级 |园豆:70 | 2012-07-13 22:11

呃,这样说来的话,我这种方式是没可能成功了么。。。

至于hao123的那种方法我也试过,我自己做了一个form,用于提交用户名和密码到163的登录页面。不过163的登录界面会提示,是从不合法的登录页面进行登录的,不让登录。所以我在想163应该有对外的接口,不知这么理解是否正确

八月神释 | 园豆:11 (初学一级) | 2012-07-16 09:10

@八月神释: 大部分防止crsf攻击的网站都会更改或验证被hash过的cookie,所以你这种直接构造cookie的方法是不可靠的。你两步操作的环境已经变化。

Zigzag | 园豆:70 (初学一级) | 2012-07-17 09:04

@Zigzag: csrf,写错了

Zigzag | 园豆:70 (初学一级) | 2012-07-17 09:04
其他回答(9)
0

1.是不是我理解错了,你登录了B站点对A站点有什么影响??,A站点当然不会验证通过啊

2.hao123那些邮箱登录原理很简单,就是把用户名和密码POST对应的邮箱登录地址就可以了.

收获园豆:25
zhangweiwen | 园豆:904 (小虾三级) | 2012-07-13 18:21

这种方法我也试过,我自己做了一个form,用于提交用户名和密码。不过163的登录界面会提示,是从不合法的登录页面进行登录的,不让登录。

支持(0) 反对(0) 八月神释 | 园豆:11 (初学一级) | 2012-07-16 09:05
0

"返回的response已经可以取到登录成功后跳转的页面的源码",能解析到URL吗、应该跳转到这个页面

收获园豆:25
Smartree | 园豆:314 (菜鸟二级) | 2012-07-13 18:30

能解析到,不过跳到目标页面时(我用的Response.Redirect),还是会提示让我登录

支持(0) 反对(0) 八月神释 | 园豆:11 (初学一级) | 2012-07-16 09:07
0

A站点通过B站点进行验证,表示A站点可以得到Session,但B并没有啊?

收获园豆:25
happydaily | 园豆:579 (小虾三级) | 2012-07-13 22:13

我想也是,我能够得到的只是ASP.NET_SessionID,这个应该是会话Session,并不是用于用户验证的Session

支持(0) 反对(0) 八月神释 | 园豆:11 (初学一级) | 2012-07-16 09:11

@八月神释: 不对吧,登陆的session就是会话的session吧,登陆前session["user"]=null,登陆后session["user"]=CurrentUserID,验证session["user"]==null就知道当前是否正确登陆了.

支持(0) 反对(0) happydaily | 园豆:579 (小虾三级) | 2012-07-16 14:53
0

你是不是在a的页面下用HttpWebRequest 请求b站点,请求成功然后定向到b站点下的某个需要验证的页面? 这样登录跟浏览器请求登录不一样的

收获园豆:25
koi | 园豆:3 (初学一级) | 2012-07-14 05:27

就结果来看的话,肯定是不一样的。我自己制作了一个form表单进行数据的提交也是不行的,这种方式果然还是不行么。看来得换个思路了,或者说,这个功能只能砍掉了。

支持(0) 反对(0) 八月神释 | 园豆:11 (初学一级) | 2012-07-16 09:12
0

可以使用session来传值,在再次调用的时候判断一下session的值是否存在,然后就可以正确的登陆了

收获园豆:25
Smile@_@ | 园豆:231 (菜鸟二级) | 2012-07-14 12:27
0

不要用Redirect(),直接Response.Write("<script>window.location.href='www.cnblogs.com';</script>");

输出一段客户端脚本,在客户端重定向。

收获园豆:25
Eugene Wang | 园豆:239 (菜鸟二级) | 2012-07-15 08:40

这种方式也试过了。。。。。。还是不行

支持(0) 反对(0) 八月神释 | 园豆:11 (初学一级) | 2012-07-16 09:20
0

Cookie的Domain问题。。。。

收获园豆:25
害怕飞的鸟 | 园豆:275 (菜鸟二级) | 2012-07-17 11:16
0

我已有同样的问题,就请教

爱吃肉的路飞 | 园豆:154 (初学一级) | 2013-03-22 14:54
0

楼主,你现在用这种方式实现了么,我现在正遇到了这个问题,没什么思路了

菜鸟111 | 园豆:202 (菜鸟二级) | 2014-01-13 11:48
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册