首页 新闻 赞助 找找看

node ajax跨域获取不到session值

0
悬赏园豆:10 [已解决问题] 解决于 2018-06-13 10:38

首先在html页面,有以下代码:

<a onclick="getSessionId()">会话登录</a>
<a onclick="setkey()">设置钥匙</a>

<script>

  function getSessionId(){
    $.post('/lock/getSessionId',function(data){
      alert("数据为:"+data);
    });
  }

  function setkey(){

    $.post('/lock/getKey',function(data){
      alert("数据为:"+data);
    });

  }

</script>

在后端代码中设置的路由

router.post('/getSessionId',function(req,res){
  var options = {
    url : 'https://clb.kdware.cn:5000/v1.1/login',
    method : 'post',
    json : true
  };
  var data = {};
  data.name = '09000001';
  data.passwd = '789456';
  options.body = data;

  request(options).then(function(_data){
  var body = _data.body;
  if(body.resultCode === 0){
    req.session.sessionid = body.sessionid;
    console.log('保存时session里面的值:',req.session.sessionid);
    res.send('获取sessionid成功!保存到了cookie里面');
  }else{
    res.send('获取sessionid失败!');
  }
});
});

这个功能的路由能正常执行,且界面弹出:获取sessionid成功!保存到了cookie里面

但是第二个路由就获取不到session数据,我也试过配置cors跨域设置

比如在app.js文件里面加载以下代码:

//设置跨域访问
app.all('*',function(req,res,next){
  res.header("Access-Control-Allow-Origin", "*");
  res.header("Access-Control-Allow-Headers", "Content-Type,Content-Length,   Authorization, Accept,X-Requested-With");
  res.header("Access-Control-Allow-Methods","PUT,POST,GET,DELETE,OPTIONS");
  res.header("X-Powered-By",' 3.2.1');
  res.header("Content-Type", "application/json;charset=utf-8");
  next();
});

如下代码:

router.post('/getKey',function(req,res){
  var options = {
    url : 'https://clb.kdware.cn:5000/v1.1/setKey',
    method : 'post',
    json : true
  };
  var data = {};
  data.sessionid = req.session.sessionid;
  console.log('设置钥匙时获得的sessionId:',data.sessionid);
  data.projectID = "9981";
  data.keyType = 1;
  data.keyValue = "789456";
  data.owner = "kdware";
  data.beginDate = "2018-5-21T13:29:00.000";
  data.endDate = "2018-5-22T13:29:00.000";
  data.devices = ['11863'];

  options.body = data;
  request(options).then(function(_data){
    var body = _data.body;
    console.log("设置钥匙返回的数据:",body);
    if(body.resultCode === 0){
      res.send('设置钥匙成功!');
    }else{
      res.send('设置钥匙失败!');
    }
  });
});

结果还是无效,在页面会弹出:设置钥匙失败!控制台会打印:设置钥匙时获得的sessionId: undefined

我想知道的是在第二个路由这里怎么才能获取第一个路由设置的sessionid,求大神指点迷津

甜珊贝奇的主页 甜珊贝奇 | 初学一级 | 园豆:118
提问于:2018-05-21 16:16
< >
分享
最佳答案
0

我用的是koa框架来写的,通过引入

var cors = require('koa-cors');

在参数里面设置

app.use(cors({
  origin : 'http://123.207.67.155',
  credentials : true
}));

在请求那里设置header参数什么的,具体可以百度下,然后就可以了

当然了,看到的效果可以在浏览器里查看,在请求头出现access-control-allow-origin参数与origin相同就可以了

甜珊贝奇 | 初学一级 |园豆:118 | 2018-06-13 10:36
其他回答(1)
1

sessionid一般存储在浏览器cookie中,默认跨域是不会上传cookie的。如果要跨域带上cookie,请完成两个事情:

1、后台配置cors,允许跨域(跨域提交cookie时,Access-Control-Allow-Origin 不能设置为*,必须是具体的域)

2、在发送ajax请求时,设置withCredentials = true

收获园豆:10
幻天芒 | 园豆:37175 (高人七级) | 2018-05-22 02:21

设置withCredentials = true是ajax的xhrFields字段吗,还是beforeSend

 

 

支持(0) 反对(0) 甜珊贝奇 | 园豆:118 (初学一级) | 2018-05-22 10:39

@魅影独秀: 你应该根据关键字去Search。

支持(0) 反对(0) 幻天芒 | 园豆:37175 (高人七级) | 2018-05-22 19:42
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册