重定向后会话丢失

时间:2015-10-26 08:01:21

标签: node.js express reactjs

我使用fetch()发送登录请求, 在服务器验证之后,我使用req.session.account = account[0];将帐户信息保存到会话并返回重定向URL,

但重定向后,会话中的帐户信息丢失了,为什么会这样?

3 个答案:

答案 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