我使用fetch()
发送登录请求,
在服务器验证之后,我使用req.session.account = account[0];
将帐户信息保存到会话并返回重定向URL,
但重定向后,会话中的帐户信息丢失了,为什么会这样?
答案 0 :(得分:0)
如果你有一些示例代码,那将有助于我们追踪问题。我的第一个想法是确保express-session
配置正确:
var app = express();
var session = require('express-session');
app.use(session({
secret: 'ibfiyegfiyegfe' // Secret is a required option.
}));
有关其他配置选项,请参阅express-session repository。
编辑:基于附加信息,我猜你已经配置了快速会话,也使用cookie来管理会话。这意味着,对于每个HTTP请求,Express都会发送包含cookie的响应。基于jQuery的AJAX调用将忽略响应cookie,这会导致连续请求Express看起来好像你从未登录过。要在使用jQuery执行AJAX请求时允许保存cookie,请使用xhrFields
字段启用{{ 1}}:
withCredentials
希望这有帮助。
答案 1 :(得分:0)
对所有人抱歉,我不明白这个问题。
我使用fetch()
方法发送登录请求。
fetch('/logon', {
method: 'post',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
body: JSON.stringify({
account: account,
password: password
})
}).then(function(response){
return response.json();
}).then(function(json){
if(json.success == 1){
window.location.href = json.redirecturl;
}else{
indexDispatcher.dispatch({
actionType: 'logonFaild',
errorInfo: json.msg
});
}
});
服务器的响应只是简单的JSON:
if (err) {
consoloe.log(err);
} else {
req.session.account = account[0]; //save account to session
var redirecturl = '/team/' + team[0].id;
console.log("account添加到session了");
res.json({
success: 1,
redirecturl: redirecturl
});
}
但是当客户端获得redirecturl
并重定向时,account
数据会丢失,因此会发生TypeError: Cannot read property 'id' of undefined
(id保存在req.session.account中)。< / p>
但是当我使用jquery $.ajax
relpace fetch
时,效果很好。我不知道原因。
答案 2 :(得分:-1)
我和你一样有过数百次的经历,我终于找到了问题。如果启用或禁用cookie,您不必担心。
您必须在re-declare
条件下if else
部分脚本(变量 - 您要显示的数据)。
只要redeclare
使用!isset,然后使用在if else
条件中提到两次的相同变量,如果您理解我的意思。
它会一遍又一遍地回调相同的变量。并确保开始session
位于页面上方。无需担心标题或白线,它实际上与它无关。
我已经尝试了一百万次。您不需要费心使用ajax
等。PHP
几乎可以做任何事情。 cheerio
。