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 相关文章推荐
jquery validate.js表单验证的基本用法入门
May 13 Javascript
uploadify在Firefox下丢失session问题的解决方法
Aug 07 Javascript
js中文逗号转英文实现
Feb 11 Javascript
JavaScript实现弹出子窗口并传值给父窗口
Dec 18 Javascript
JS图片放大效果简单实现代码
Sep 08 Javascript
Vue.js教程之计算属性
Nov 11 Javascript
JS实现搜索关键词的智能提示功能
Jul 07 Javascript
详解vue.js之绑定class和style的示例代码
Aug 24 Javascript
Node.js Stream ondata触发时机与顺序的探索
Mar 08 Javascript
解决layer.confirm选择完之后消息框不消失的问题
Sep 16 Javascript
vue使用prop可以渲染但是打印台报错的解决方式
Nov 13 Javascript
在vue项目中promise解决回调地狱和并发请求的问题
Nov 09 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
《逃离塔科夫》——“萌新劝退,老手自嗨”的硬核FPS游戏
2020/04/03 其他游戏
PHP中全面阻止SQL注入式攻击分析小结
2012/01/30 PHP
php实现的发送带附件邮件类实例
2014/09/22 PHP
php5.3不能连接mssql数据库的解决方法
2014/12/27 PHP
php堆排序实现原理与应用方法
2015/01/03 PHP
PHP向socket服务器收发数据的方法
2015/01/24 PHP
php通过修改header强制图片下载的方法
2015/03/24 PHP
简单谈谈PHP中的include、include_once、require以及require_once语句
2016/04/23 PHP
js截取字符串的两种方法及区别详解
2013/11/05 Javascript
jQuery多级弹出菜单插件ZoneMenu
2014/12/18 Javascript
jQuery封装的tab选项卡插件分享
2015/06/16 Javascript
使用RequireJS优化JavaScript引用代码的方法
2015/07/01 Javascript
JavaScript学习笔记之取数组中最大值和最小值
2016/03/23 Javascript
javascript 判断一个对象为数组的方法
2017/05/03 Javascript
简易Vue评论框架的实现(父组件的实现)
2018/01/08 Javascript
JavaScript实现简单的隐藏式侧边栏功能示例
2018/08/31 Javascript
vue-music 使用better-scroll遇到轮播图不能自动轮播问题
2018/12/03 Javascript
Python(Tornado)模拟登录小米抢手机
2013/11/12 Python
如何处理Python3.4 使用pymssql 乱码问题
2016/01/08 Python
使用Python的Twisted框架编写非阻塞程序的代码示例
2016/05/25 Python
python学习之面向对象【入门初级篇】
2017/01/21 Python
Python使用Turtle模块绘制五星红旗代码示例
2017/12/11 Python
在Django中URL正则表达式匹配的方法
2018/12/20 Python
django中使用事务及接入支付宝支付功能
2019/09/15 Python
Python编写打字训练小程序
2019/09/26 Python
无需压缩软件,用python帮你操作压缩包
2020/08/17 Python
python二维图制作的实例代码
2020/12/03 Python
让IE可以变相支持CSS3选择器
2010/01/21 HTML / CSS
HTML5地理定位与第三方工具百度地图的应用
2016/11/17 HTML / CSS
个人思想理论学习的自我鉴定
2013/11/30 职场文书
澳大利亚商务邀请函
2014/01/17 职场文书
致跳高运动员加油稿
2014/02/12 职场文书
户外活动策划方案
2014/03/12 职场文书
高三学生评语大全
2014/04/25 职场文书
读后感怎么写?书写读后感的基本技巧!
2019/12/10 职场文书
Python tensorflow卷积神经Inception V3网络结构
2022/05/06 Python