问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

express如何解决ajax跨域访问session失效问题详解

发布网友 发布时间:2023-08-17 01:51

我来回答

1个回答

热心网友 时间:2023-09-18 13:42



前言

最近在学习express,就用以前做的项目来进行express前后端分离的练手了,在做登陆注册的时候发现跨域的时候,session的值是会失效的,导致session里面的数据获取为undefined,网上找资料加上自己的不断尝试,终于找到了解决方法,简单记录一下解决方法。


解决方法

1、客户端因为session原则上是需要cookie支持的,所以Ajax方法里面必须添加 xhrFields:{withCredentials:true},表示允许带Cookie的跨域Ajax请求( 特别说明,只要使用的session都得加这句)

$('#login').click(function () {
$.ajax({
url: 'http://localhost:3000/users/yzm',//服务端路由地址
type: 'get',
xhrFields:{withCredentials:true},
dataType: 'json',
success:function(data){
$('#yzm_img').html(data)
},
error:function(){
alert('error');
}
});
});
$('#form_login').submit(function (e) {/!*登录*!/
e.preventDefault();/!*阻止表单默认事件,页面全局刷新*!/
var data=$('#form_login').serialize();/!*将表单里的数据包装起来*!/
$.ajax({
url : 'http://localhost:3000/users/login',
type : "post",
data : data,
xhrFields:{withCredentials:true},
dataType:'json',
success:function(msg) {
alert("这是返回的数据"+msg);
},
error:function(err){
alert("这是失败的信息"+err);
}
});
});
通过设置 withCredentials: true ,发送Ajax时,Request header中便会带上 Cookie 信息。


2、服务器端修改app.js文件


相应的,对于客户端的参数,服务器端也需要进行设置。


对应客户端的 xhrFields.withCredentials: true 参数,服务器端通过在响应 header 中设置 Access-Control-Allow-Credentials = true 来运行客户端携带证书式访问。通过对 Credentials 参数的设置,就可以保持跨域 Ajax 时的 Cookie。

var express = require('express');
var session = require('express-session');/*引入会话变量*/
var app = express();
app.all('*', function(req, res, next) {
res.header("Access-Control-Allow-Origin", "http://localhost:63342");//前端域名
res.header("Access-Control-Allow-Credentials",'true');
res.header("Access-Control-Allow-Methods","PUT,POST,GET,DELETE,OPTIONS");
next();
});
特别注意:服务器端 Access-Control-Allow-Credentials = true时,参数Access-Control-Allow-Origin 的值不能为 '*' ,必须为自己客户端项目所在地址。


3、服务器中使用session

router.get('/yzm', function(req, res, next) {
req.session.yzm='abcd';
}
router.post('/login', function(req, res, next) {
console.log(req.session.yzm);
}
总结

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
161607融通巨潮基金我是1.96元今天买入的,他的前景怎么样。会不会太... 161607融通巨潮基金我是1.96元今天买入的,不到一个月跌了两毛了惨痛啊... 原来42只羊,运走了27只羊,还剩多少只小羊?如果在买来18只现在有多少只... 羊了个羊找不到15 羊了个羊第二关为什么总剩最后15个 跪求4minute的dreamcometrue音译歌词(非罗马拼音) 我看曹刿是一个什么样的人 作文 急急急 三赞曹刿300字作文 作文 我心中的英雄曹刿300 关于翻译机离线使用的效果怎么样? 为什么不能看羊的眼睛 为什么很多名牌企业不起诉卖冒牌它们服装的经营者呢 2000年至2005年中国旅行社的数量 大家估计一下今年上虞中考的录取分数 2012年上虞市中考排名 600分排名第几 上虞市:2012中考录取普高的分数线会是多少 2012年中考上虞各校录取分预测 上虞2012年中考成绩录取 巅峰战舰在哪看无尽成绩啊 蟠桃很大就是中间裂隙大这样的桃子能吃吗 巅峰战舰怎么看自己拥有战舰数量 紧急!英雄萨姆HD:第二次遭遇缺失重要文件! 英雄萨姆第二次遭遇HD的问题 英雄萨姆2全部隐藏地点 三星W2014能用移动联通卡上网吗? 三星2014支持4g卡么 拜求“双人现代舞 随 ”里面的歌曲名称! 超爱的! 幸福了然后呢的歌曲MV excel里销售额为100,80,90,单价2000怎么计算销售额 ...650D,但是资金有限。。。镜头是买18-55,18-135,小痰盂之中的一个... 不跳转怎么把session值传到另一个页面,我用session存了一个值,为什么到... session值取不到 session取不到值 c# asp.net ...存入session。在其他页面调用不到存入的session值,是怎么回事... 急求解:java项目中session 取不到值 衣服的聚酯纤维是什么材料 excel表格怎样设置页面打印方式? 灵域第6季为什么不出了 吃菠萝舌头出血服什么药好点 女生九分裤四种搭配方法 惠州南到站江北华贸多久? 集水坑是什么东西? 集水坑的作用是什么,有什么原理? 请问集水坑排水是什么?有何作用? 从看丹桥到昌平妇幼保健院怎么坐公交车,最快需要多久 六里桥北里到丰台区万丰桥翠清饭店坐几路公交车??在哪里下来??_百度知... 从看丹桥北到正阳大桥东怎么坐公交车,最快需要多久 从涿州坐多少路公交车到六里桥,谢谢 汽车怎样开始起步 2019年上海成人高考学位英语考试难吗?