VUE+php跨域session问题
VUE+php跨域session问题VUE+php跨域session问题cookie跨域请求中 cookiephp跨域sessionVUE+php跨域session问题闲来无事,公司又处于下滑期,于是就自学了vue.js,但是作为初学者,遇到很多问题,这里要感谢我的Big Brother @Dires.t帮助我许多,因此解决了问题,好了言归正传!cookie首先必须明确一点,存储cooki...
VUE+php跨域session问题
VUE+php跨域session问题
闲来无事,公司又处于下滑期,于是就自学了vue.js,但是作为初学者,遇到很多问题,这里要感谢我的Big Brother @Dires.t帮助我许多,因此解决了问题,好了言归正传!
cookie
首先必须明确一点,存储cookie是浏览器提供的功能。cookie 其实是存储在浏览器中的纯文本,浏览器的安装目录下会专门有一个 cookie 文件夹来存放各个域下设置的cookie。
当网页要发http请求时,浏览器会先检查是否有相应的cookie,有则自动添加在request header中的cookie字段中。这些是浏览器自动帮我们做的,而且每一次http请求浏览器都会自动帮我们做。这个特点很重要,因为这关系到“什么样的数据适合存储在cookie中”。
存储在cookie中的数据,每次都会被浏览器自动放在http请求中,如果这些数据并不是每个请求都需要发给服务端的数据,浏览器这设置自动处理无疑增加了网络开销;但如果这些数据是每个请求都需要发给服务端的数据(比如身份认证信息),浏览器这设置自动处理就大大免去了重复添加操作。所以对于那设置“每次请求都要携带的信息(最典型的就是身份认证信息)”就特别适合放在cookie中,其他类型的数据就不适合了。
但在 localStorage 出现之前,cookie被滥用当做了存储工具。什么数据都放在cookie中,即使这些数据只在页面中使用而不需要随请求传送到服务端。当然cookie标准还是做了一些限制的:每个域名下的cookie 的大小最大为4KB,每个域名下的cookie数量最多为20个(但很多浏览器厂商在具体实现时支持大于20个)。
跨域请求中 cookie
默认情况下,在发生跨域时,cookie 作为一种凭据信息是不会被传送到服务端的。必须要进行额外设置才可以,这里给大家推荐一篇关于阮一峰的跨域资源共享 CORS 详解
php跨域session
session被用于表示一个持续的连接状态,在网站访问中一般指代客户端浏览器的进程从开启到结束的过程。session其实就是网站分析的访问(visits)度量,表示一个访问的过程。
session的常见实现形式是会话cookie(session cookie),即未设置过期时间的cookie,这个cookie的默认生命周期为浏览器会话期间,只要关闭浏览器窗口,cookie就消失了。实现机制是当用户发起一个请求的时候,服务器会检查该请求中是否包含sessionid,如果未包含,则系统会创造一个名为JSESSIONID的输出 cookie返回给浏览器(只放入内存,并不存在硬盘中),并将其以HashTable的形式写到服务器的内存里面;当已经包含sessionid是,服务端会检查找到与该session相匹配的信息,如果存在则直接使用该sessionid,若不存在则重新生成新的 session。这里需要注意的是session始终是有服务端创建的,并非浏览器自己生成的。 但是浏览器的cookie被禁止后session就需要用get方法的URL重写的机制或使用POST方法提交隐藏表单的形式来实现。
当发生跨域请求使用session是,浏览器不会加上cookie,从而使服务器无法读取该cookie下对应的session;那么我们的PHP页面就需要加上:
header('Access-Control-Allow-Origin:http://127.0.0.1:8080');//表示接受http://127.0.0.1:8080的请求
header('Access-Control-Allow-Credentials:true');//表示是否允许发送Cookie
另一方面,开发者必须在AJAX请求中打开withCredentials属性
//jquery写法
$.ajax({
data:param,
url:url,
type:"get",
dataType: 'json',
xhrFields:{
withCredentials:true
},
success:function(res){
_this.spans = res;
}
})
//axios写法
axios.post('http://101.132.138.141:8888/service/pageUsers', objectToForm({
'currentPage': '1',
'pageSize': '10',
'token': '7e987daa-6c84-46d2-be26-f345dfaed8a7',
}), {
withCredentials: true
})
.then(function(res) {
})
.catch(function(err) {
});
完结。。。。。
最后附上一些参考资料:
1、你真的会使用XMLHttpRequest吗?
2、跨域资源共享 CORS 详解
更多推荐
所有评论(0)