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 相关文章推荐
用javascript动态调整iframe高度的方法
Mar 06 Javascript
深入document.write()与HTML4.01的非成对标签的详解
May 08 Javascript
JavaScript的漂亮的代码片段
Jun 05 Javascript
Js控制弹窗实现在任意分辨率下居中显示
Aug 01 Javascript
JavaScript利用构造函数和原型的方式模拟C#类的功能
Mar 06 Javascript
jQuery回调函数的定义及用法实例
Dec 23 Javascript
WEB前端开发框架Bootstrap3 VS Foundation5
May 16 Javascript
Angular2自定义分页组件
Apr 19 Javascript
JS跳转手机站url的若干注意事项
Oct 18 Javascript
IE11下使用canvas.toDataURL报SecurityError错误的解决方法
Nov 19 Javascript
手把手教你使用TypeScript开发Node.js应用
May 06 Javascript
js实现简单的无缝轮播效果
Sep 05 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
PHP 判断常量,变量和函数是否存在
2009/04/26 PHP
wordpress自定义url参数实现路由功能的代码示例
2013/11/28 PHP
ThinkPHP 3.2 版本升级了哪些内容
2015/03/05 PHP
PHP实现的AES 128位加密算法示例
2019/09/16 PHP
IE 下的只读 innerHTML
2009/08/21 Javascript
网页前台通过js非法字符过滤代码(骂人的话等等)
2010/05/26 Javascript
jquery+ajax每秒向后台发送请求数据然后返回页面的代码
2011/01/17 Javascript
jQuery版仿Path菜单效果
2011/12/15 Javascript
js获取url中指定参数值的示例代码
2013/12/14 Javascript
js中小数转换整数的方法
2014/01/26 Javascript
javascript实现行拖动的方法
2015/05/27 Javascript
jQuery实现向下滑出的平滑下拉菜单效果
2015/08/21 Javascript
AngularJS基础 ng-include 指令简单示例
2016/08/01 Javascript
手机端实现Bootstrap简单图片轮播效果
2016/10/13 Javascript
在DWR中实现直接获取一个JAVA类的返回值的两种方法
2016/12/25 Javascript
vue-cli的webpack模板项目配置文件分析
2017/04/01 Javascript
浅析为什么a="abc" 不等于 a=new String("abc")
2017/10/25 Javascript
vue.js的简单自动求和计算实例
2019/11/08 Javascript
js绘制一条直线并旋转45度
2020/08/21 Javascript
vue绑定数字类型 value为数字的实例
2020/08/31 Javascript
[08:04]TI4西雅图DOTA2前线报道 海涛探访各路人马
2014/07/09 DOTA
用pywin32实现windows模拟鼠标及键盘动作
2014/04/22 Python
python中map()与zip()操作方法
2016/02/27 Python
Python爬虫包BeautifulSoup实例(三)
2018/06/17 Python
Python3.8中使用f-strings调试
2019/05/22 Python
Django用户认证系统 User对象解析
2019/08/02 Python
Python一键安装全部依赖包的方法
2019/08/12 Python
python实现电子词典
2020/03/03 Python
欧舒丹比利时官网:L’OCCITANE比利时
2017/04/25 全球购物
应届生文秘专业个人自荐信格式
2013/09/21 职场文书
社会学专业学生职业规划书
2014/02/07 职场文书
团结演讲稿范文
2014/05/23 职场文书
三八红旗手先进事迹材料(2016推荐版)
2016/02/25 职场文书
人生感悟经典句子
2019/08/20 职场文书
Spring mvc是如何实现与数据库的前后端的连接操作的?
2021/06/30 Java/Android
threejs太阳光与阴影效果实例代码
2022/04/05 Javascript