首先在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,求大神指点迷津
我用的是koa框架来写的,通过引入
var cors = require('koa-cors');
在参数里面设置
app.use(cors({
origin : 'http://123.207.67.155',
credentials : true
}));
在请求那里设置header参数什么的,具体可以百度下,然后就可以了
当然了,看到的效果可以在浏览器里查看,在请求头出现access-control-allow-origin参数与origin相同就可以了
sessionid一般存储在浏览器cookie中,默认跨域是不会上传cookie的。如果要跨域带上cookie,请完成两个事情:
1、后台配置cors,允许跨域(跨域提交cookie时,Access-Control-Allow-Origin 不能设置为*,必须是具体的域)
2、在发送ajax请求时,设置withCredentials = true
设置withCredentials = true是ajax的xhrFields字段吗,还是beforeSend
@魅影独秀: 你应该根据关键字去Search。