ajax跨域请求时,sessionId不一样,导致无法记住登陆状态

.png)
.png)
这是用户列表页,无法获取cookie,原因是两次请求不是同一个sessionid,服务器端,认为还没有登陆。

.png)
Cross-Origin Resource Sharing,跨域资源共享,简称 CORS,可以作为一种跨域请求以及响应的解决方案,不过,使用的频率较少,原因大概有以下几种:
1、资料较少,网上搜到的“经验之谈”绝大多数也都是你抄我,我cp他,使用不当还可能造成安全隐患。
2、目前主流的处理方式是使用JSONP,易于实现,兼容性好,可查的资料也很多。而 IE10以下 版本的浏览器是不支持 CORS 的 ,因此,如果要求兼容IE浏览器,会导致使用此种方式的跨域请求以及传递Cookie的计划夭折,最终还得回归JSONP。
CORS的原理是:
W3C对你说:内个,同学们,我们为了解决跨域通信问题,新增了一个标准,大家在使用时,加一下就行了~
虽然是一句玩笑话,但。。事实确实如此。我们之所以能够“互联”,协议 是根基。
CORS的使用方式:
以下均是模拟 从 A. abc.com 发起一个到 B. abc.com 的请求 的场景,即 本次 “跨域” 并非 “大跨”,而是在 根域相同 的情况下,去 请求 不同的子域 。
先解释一下,为什么要用 子域之间的请求 作为模拟场景:
这是因为多数人会认为跨域,就是不同根域之间的请求,或者认为根域相同的 不同的子域名之间是安全的调用,这些都是对跨域错误的认识。
实际上浏览器同源策略禁止了不同子域名之间的请求。
需求一:能让我跨就行
这也是最简单的需求,在 B 的服务端程序中,增加响应头:
// 使用通配符 * ,表示当前服务端 返回的信息允许所有源访问, 不推荐
header( 'Access-Control-Allow-Origin:*' );
// 指定可信任的域名来接收响应信息, 推荐
header( 'Access-Control-Allow-Origin:http://A.abc.com' );
如此一来,一个跨域请求就不会被浏览器的 同源安全策略所阻止了。
需求二:跨过去以后,我还得操作Cookie
Well~ 让我们在 B 的服务端程序中,继续补增响应头:
// 允许携带 用户认证凭据(也就是允许客户端发送的请求携带Cookie)
header( 'Access-Control-Allow-Credentials:true' );
同时,A 在向 B 发起请求的时候,需要将 XMLHttpRequest 对象的 withCredentials 属性设置为 true,JQuery1.5.1+ 提供了相应的字段,使用方式如下:
$.ajax({
url:"B. abc.com ",
xhrFields:{
withCredentials:true
},
});
这样,你会在 B 端发现:哦也~ 收到 Cookie 了。
设置 withCredentials 为 true 的请求中会包含 A 端的所有Cookie,这些Cookie仍然遵循同源策略,所以,你只能访问其中和 B 端同根域的Cookie,而无法访问其他域的Cookie。
总结一下就是:
要想跨域,你得有后台(需要服务器端配合)。
ajax跨域请求时,sessionId不一样,导致无法记住登陆状态的更多相关文章
- 为什么返回的数据前面有callback? ashx/json.ashx?的后面加 callback=? 起什么作用 js url?callback=xxx xxx的介绍 ajax 跨域请求时url参数添加callback=?会实现跨域问题
为什么返回的数据前面有callback? 这是一个同学出现的问题,问到了我. 应该是这样的: 但问题是这样的: 我看了所请求的格式和后台要求的也是相同的.而且我也是这种做法,为什么他的就不行呢? ...
- 在用AJAX跨域请求时遇到的问题
刚刚接触ajax就遇到一个词--跨域. 在我百度了各种资料以后总结了一句话:“只要不是在一个协议.域.名端口下,都属于跨域(127.0.0.1本地也属于跨域)”. 在做ajax请求的时候,请求不到并且 ...
- ajax 跨域请求时url参数添加callback=?会实现跨域问题
例如: 1.在 jQuery 中,可以通过使用JSONP 形式的回调函数来加载其他网域的JSON数据,如 "myurl?callback=?".jQuery 将自动替换 ? 为正确 ...
- SpringMvc+ajax跨域请求时,出现options类型的请求并返回403的解决方案
在使用 $.ajax({ url:'http://127.0.0.1:8081/rest/ccxxx/xxxx', type:'POST', dataType:"json", co ...
- Ajax跨域请求,设置content
在使用Ajax跨域请求时,如果设置Header的ContentType为application/json,会分两次发送请求.第 一次先发送Method为OPTIONS的请求到服务器,这个请求会询问服务 ...
- ASP.NET MVC 实现AJAX跨域请求方法《1》
ASP.NET MVC 实现AJAX跨域请求的两种方法 通常发送AJAX请求都是在本域内完成的,也就是向本域内的某个URL发送请求,完成部分页面的刷新.但有的时候需要向其它域发送AJAX请求,完成数据 ...
- webapi 解决ajax跨域请求问题
webapi在配置文件中加入这几句就可以解决ajax(同源策略是JavaScript里面的限制,其他的编程语言,比如在C#,Java或者iOS等其他语言中是可以调用外部的WebService,也就是 ...
- Nginx 实现AJAX跨域请求
在工作中遇到跨域请求的问题: AJAX从一个域请求另一个域会有跨域的问题.那么如何在nginx上实现ajax跨域请求呢?要在nginx上启用跨域请求,需要添加add_header Access-Con ...
- jQuery ajax跨域请求的解决方法
在Ajax应用中,jQuery的Ajax请求是非常容易而且方便的,但是初学者经常会犯一个错误,那就是Ajax请求的url不是本地或者同一个服务器下面的URI,最后导致虽然请求200,但是不会返回任何数 ...
随机推荐
- ksoap2- webservice
1.概述 对于J2ME访问远端的Web Service,除了官方标准JSR 172,我们还有两种选择: l kSOAP l Wingfoot Wingfoot是由Win ...
- post请求时2种传参方式
@Testpublic void dopost(){ String httpurl = "https://jin.caimao.com/api/user/loginSalt"; M ...
- 让win7安装时出现版本选项
win7有几种版本,win7旗舰版包含各大版本,修改一下ISO,让安装时出现版本选项窗口: 1.准备好一个官方win7旗舰版安装包IOS光盘镜像. 2.用UltraISO打开光盘镜像并删除source ...
- 响应的系统设置的事件——Configuration类简介
Configuration类专门用于描述手机设备上的配置信息,这些配置信息既包括用户特定的配置项,也包括系统的动态设置配置. 程序可调用Activity的如下方法来获取系统的Configuration ...
- js实现360度图片旋转
▓▓▓▓▓▓ 大致介绍 这次是一个简单的效果,就是思路的问题 效果: ▓▓▓▓▓▓ 思路 旋转的效果就是根据鼠标的的移动距离来显示不同的图片,形成视觉差,仿佛就是在正真的旋转 由于效果是根据鼠标的移动 ...
- phpstrom 的一些常用设置
phpstrom是php开发者使用率比较高的一款IDE,也是我使用的比较多的一款,以免以后忘记了自己熟悉的设置,在此做一些记录. 1.主题的设置 可以在http://www.phpstorm-th ...
- 《连载 | 物联网框架ServerSuperIO教程》- 15.数据持久化接口的使用。附:3.2发布与版本更新说明。
1.C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍 <连载 | 物联网框架ServerSuperIO教程>1.4种通讯模式机制. <连载 | 物联网框架Serve ...
- 前端基本知识(一):W3C标准&&冒泡事件,捕获事件,W3C DOM对象模型,对比分析
W3C标准是万维网联盟, 其他的可以参考万维网版本的更新内容 一.W3C标准 二.W3C DOM事件 三.冒泡事件 四.捕获事件 一.W3C标准 其实网页是由三分部组成:1.结构(structure) ...
- R语言爬虫 rvest包 html_text()-html_nodes() 原理说明
library(rvest) 例子网页:http://search.51job.com/jobsearch/search_result.php?fromJs=1&jobarea=010000% ...
- Codeforces Round #396.D
D. Mahmoud and a Dictionary time limit per test 4 seconds memory limit per test 256 megabytes input ...