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 相关文章推荐
js css样式操作代码(批量操作)
Oct 09 Javascript
javascript中的undefined 与 null 的区别  补充篇
Mar 17 Javascript
js中opener与parent的区别详细解析
Jan 14 Javascript
sogou地图API用法实例教程
Sep 11 Javascript
JavaScript操作Cookie详解
Feb 28 Javascript
深入理解JavaScript程序中内存泄漏
Mar 17 Javascript
Bootstrap零基础入门教程(二)
Jul 18 Javascript
详解webpack分包及异步加载套路
Jun 29 Javascript
highcharts 在angular中的使用示例代码
Sep 20 Javascript
MVVM框架下实现分页功能示例
Jun 14 Javascript
JavaScript实现HTML导航栏下拉菜单
Nov 25 Javascript
javascript中layim之查找好友查找群组
Feb 06 Javascript
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
精致的人儿就要挑杯子喝咖啡
2021/03/03 冲泡冲煮
PHP保留两位小数并且四舍五入及不四舍五入的方法
2013/09/22 PHP
PHP使用json_encode函数时不转义中文的解决方法
2014/11/12 PHP
PHP 验证登陆类分享
2015/03/13 PHP
PHP读取zip文件的方法示例
2016/11/17 PHP
php实现给二维数组中所有一维数组添加值的方法
2017/02/04 PHP
PHP策略模式定义与用法示例
2017/07/27 PHP
PHP实现的XXTEA加密解密算法示例
2018/08/28 PHP
Yii框架日志操作图文与实例详解
2019/09/09 PHP
JavaScript Event学习第八章 事件的顺序
2010/02/07 Javascript
调试Node.JS的辅助工具(NodeWatcher)
2012/01/04 Javascript
原生js实现移动开发轮播图、相册滑动特效
2015/04/17 Javascript
深入讲解AngularJS中的自定义指令的使用
2015/06/18 Javascript
使用控制台破解百小度一个月只准改一次名字
2015/08/13 Javascript
js+css实现有立体感的按钮式文字竖排菜单效果
2015/09/01 Javascript
分享15个大家都熟知的jquery小技巧
2015/12/02 Javascript
jQuery实现TAB选项卡切换特效简单演示
2016/03/04 Javascript
浅谈js的url解析函数封装
2016/06/28 Javascript
JavaScript中如何使用cookie实现记住密码功能及cookie相关函数介绍
2016/11/10 Javascript
JS实现元素上下左右移动效果
2017/10/18 Javascript
vue项目优化之通过keep-alive数据缓存的方法
2017/12/11 Javascript
JavaScript常见JSON操作实例分析
2018/08/08 Javascript
Js中使用正则表达式验证输入是否有特殊字符
2018/09/07 Javascript
vue+express+jwt持久化登录的方法
2019/06/14 Javascript
JavaScript Array对象使用方法解析
2019/09/24 Javascript
微信小程序基于高德地图API实现天气组件(动态效果)
2020/10/22 Javascript
Python 绘图和可视化详细介绍
2017/02/11 Python
使用python生成目录树
2018/03/29 Python
python使用tcp实现局域网内文件传输
2020/03/20 Python
Python实现登陆文件验证方法
2018/10/06 Python
python lambda表达式在sort函数中的使用详解
2019/08/28 Python
英国领先的大码时装品牌之一:Elvi
2018/08/26 全球购物
Haglöfs瑞典官方网站:haglofs火柴棍,欧洲顶级户外品牌
2018/10/18 全球购物
致跳高运动员加油稿
2014/02/12 职场文书
社区综治宣传月活动总结
2014/07/02 职场文书
《堡垒之夜》联动《刺客信条》 4月7日正式上线
2022/04/06 其他游戏