1. 要实现一个功能从一个网站A上跳转到另一个网站B 并且实现B网站登录。
2. 网上百度了下,ajax跨域访问 比较好的方法是使用jsonp,但是由于另一个网站接口返回的是xml格式,而且手上没有源代码,所以只能自己捣腾。
3. 首先查看B网站的登录界面的js代码,找到登录所用的格式参数什么的。(手头上有B网站的前台代码,asp.net mvc)
4. 写一个基本的ajax post 代码。点击按钮就会提交,发现没反应,然后f12 发现下面的错误
5. 百度了一下最后发现要在B网站的web.config 下添加如下:
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Headers" value="Content-Type" />
<add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" />
</customHeaders>
</httpProtocol>
<handlers>
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<remove name="OPTIONSVerbHandler" />
<remove name="TRACEVerbHandler" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
6. 再次点击,可以跳转到B网站的登录后的界面,但是提示登录失败,又跳回到登录界面。猜测可能是因为cookie没传过去。
7. 上网查找资料,最终web.config添加内容修改如下:
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Credentials" value="true" />
<add name="Access-Control-Allow-Origin" value="http://localhost:8004" /><!-- 这里要写入A网站的地址,否则会出错 --!>
<add name="Access-Control-Allow-Headers" value="Content-Type" />
<add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" />
</customHeaders>
</httpProtocol>
<handlers>
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<remove name="OPTIONSVerbHandler" />
<remove name="TRACEVerbHandler" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
8. 重新运行,发现还是不能登录成功,f12查看cookie 已经带过来了,没办法,用B的登录界面登录,查看所有需要的cookie,发现少了几个,将这几个cookie 加入后,成功登录。