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


Posted in Javascript onJune 20, 2019

前言

最近在学习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);
}

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
利用onresize使得div可以随着屏幕大小而自适应的代码
Jan 15 Javascript
javascript 设计模式之单体模式 面向对象学习基础
Apr 18 Javascript
javaScript如何生成xmlhttp
Dec 16 Javascript
利用js(jquery)操作Cookie的方法说明
Dec 19 Javascript
基于jQuery仿淘宝产品图片放大镜代码分享
Jun 23 Javascript
AngularJS入门教程之Select(选择框)详解
Jul 27 Javascript
简单介绍react redux的中间件的使用
Apr 06 Javascript
swiper4实现移动端导航切换
Oct 16 Javascript
uni-app自定义导航栏按钮|uniapp仿微信顶部导航条功能
Nov 12 Javascript
浅析Vue下的components模板使用及应用
Nov 27 Javascript
原生js实现弹幕效果
Nov 29 Javascript
详解Vue 的异常处理机制
Nov 30 Vue.js
JS去除字符串最后的逗号实例分析【四种方法】
Jun 20 #Javascript
如何在微信小程序中实现Mixins方案
Jun 20 #Javascript
js JSON.stringify()基础详解
Jun 19 #Javascript
使用jquery-easyui的布局layout写后台管理页面的代码详解
Jun 19 #jQuery
Vue-Cli 3.0 中配置高德地图的两种方式
Jun 19 #Javascript
vue axios重复点击取消上一次请求封装的方法
Jun 19 #Javascript
javascript创建元素和删除元素实例小结
Jun 19 #Javascript
You might like
如何把PHP转成EXE文件
2006/10/09 PHP
用PHP调用Oracle存储过程的方法
2008/09/12 PHP
PHP删除HTMl标签的实现代码
2013/06/30 PHP
php生成excel文件的简单方法
2014/02/08 PHP
分享php多功能图片处理类
2016/05/15 PHP
Ajax提交表单时验证码自动验证 php后端验证码检测
2016/07/20 PHP
javascript 3d 逐侦产品展示(核心精简)
2014/03/26 Javascript
jquery实现当滑动到一定位置时固定效果
2014/06/17 Javascript
javascript学习笔记_浅谈基础语法,类型,变量
2016/09/19 Javascript
AngularJS路由实现页面跳转实例
2017/03/03 Javascript
Vue之Vue.set动态新增对象属性方法
2018/02/23 Javascript
利用js将ajax获取到的后台数据动态加载至网页中的方法
2018/08/08 Javascript
详解小程序退出页面时清除定时器
2019/04/28 Javascript
vue+koa2实现session、token登陆状态验证的示例
2019/08/30 Javascript
阿望教你用vue写扫雷小游戏
2020/01/20 Javascript
[00:59]PWL开团时刻DAY7——我在赶
2020/11/06 DOTA
python之wxPython菜单使用详解
2014/09/28 Python
Python脚本实现12306火车票查询系统
2016/09/30 Python
python实现多线程抓取知乎用户
2016/12/12 Python
python实现顺时针打印矩阵
2019/03/02 Python
python获取txt文件词向量过程详解
2019/07/05 Python
matplotlib实现数据实时刷新的示例代码
2021/01/05 Python
HTML5实现经典坦克大战坦克乱走还能发出一个子弹
2013/09/02 HTML / CSS
HTML5计时器小例子
2013/10/15 HTML / CSS
瑞典时尚服装购物网站:Miinto.se
2017/10/30 全球购物
美国领先的机场停车聚合商:Airport Parking Reservations
2020/02/28 全球购物
解释一下ruby中的特殊方法与特殊类
2013/02/26 面试题
新闻专业学生的自我评价
2014/02/13 职场文书
五年级学生评语
2014/04/22 职场文书
安全责任书怎么写
2014/07/28 职场文书
运动会通讯稿100字
2015/07/20 职场文书
golang 实现对Map进行键值自定义排序
2021/04/28 Golang
redis不能访问本机真实ip地址的解决方案
2021/07/07 Redis
关于EntityWrapper的in用法
2022/03/22 Java/Android
《我的美好婚事》动画化决定纪念插画与先导PV公开
2022/04/06 日漫
python多次执行绘制条形图
2022/04/20 Python