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入门之对象与JSON详解
Oct 21 Javascript
jQuery插件-jRating评分插件源码分析及使用方法
Dec 28 Javascript
Jquery的hover方法让鼠标经过li时背景变色
Sep 06 Javascript
编写js扩展方法判断一个数组中是否包含某个元素
Nov 08 Javascript
javascript获得当前的信息的一些常用命令
Feb 25 Javascript
AngularJS入门之动画
Jul 27 Javascript
Javascript中常见的逻辑题和解决方法
Sep 17 Javascript
jQuery简单自定义图片轮播插件及用法示例
Nov 21 Javascript
JS 调试中常见的报错问题解决方法
May 20 Javascript
理解Koa2中的async&await的用法
Feb 05 Javascript
集成vue到jquery/bootstrap项目的方法
Feb 10 jQuery
JavaScript隐式类型转换代码实例
May 29 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
DC动画电影《黑暗正义联盟》曝预告 5月5日上线数字平台
2020/04/09 欧美动漫
PHP XML备份Mysql数据库
2009/05/27 PHP
解析如何用php screw加密php源代码
2013/06/20 PHP
从零开始学YII2框架(二)通过 Composer 安装扩展插件
2014/08/20 PHP
golang实现php里的serialize()和unserialize()序列和反序列方法详解
2018/10/30 PHP
提高网站信任度的技巧
2008/10/17 Javascript
input按钮的事件处理大全
2010/12/10 Javascript
Javascript实现仿WebQQ界面的“浮云”兼容 IE7以上版本及FF
2011/04/27 Javascript
基于jQuery的简单九宫格实现代码
2012/08/09 Javascript
采用call方式实现js继承
2014/05/20 Javascript
node.js中的console.log方法使用说明
2014/12/09 Javascript
嵌入式iframe子页面与父页面js通信的方法
2015/01/20 Javascript
js用拖动滑块来控制图片大小的方法
2015/02/27 Javascript
JS实现网页背景颜色与select框中颜色同时变化的方法
2015/02/27 Javascript
vue 通过下拉框组件学习vue中的父子通讯
2017/12/19 Javascript
VueJs监听window.resize方法示例
2018/01/17 Javascript
[原创]jquery判断元素内容是否为空的方法
2018/05/04 jQuery
Vue实现简单的留言板
2020/10/23 Javascript
[04:59]DOTA2-DPC中国联赛 正赛 Ehome vs iG 选手采访
2021/03/11 DOTA
Ubuntu下使用Python实现游戏制作中的切分图片功能
2018/03/30 Python
Python实现全排列的打印
2018/08/18 Python
Python编程在flask中模拟进行Restful的CRUD操作
2018/12/28 Python
python调用opencv实现猫脸检测功能
2019/01/15 Python
selenium2.0中常用的python函数汇总
2019/08/05 Python
pygame实现俄罗斯方块游戏(基础篇3)
2019/10/29 Python
使用python快速在局域网内搭建http传输文件服务的方法
2019/11/14 Python
html5教程实现Photoshop渐变色效果
2013/12/04 HTML / CSS
Sixt美国租车:高端豪华车型自驾体验
2017/09/02 全球购物
Belvilla德国:在线预订度假屋
2018/04/10 全球购物
几道Java和数据库的面试题
2013/05/30 面试题
销售类个人求职信范文
2013/09/25 职场文书
模具设计与制造专业应届生求职信
2013/10/18 职场文书
篮球赛口号
2014/06/18 职场文书
车辆年检委托书范本
2014/10/14 职场文书
市贸粮局召开党的群众路线教育实践活动总结大会新闻稿
2014/10/21 职场文书
企业财务经理岗位职责
2015/04/08 职场文书