2015-10-26 183 views
0

我用fetch()發送的登錄POST請求, 服務器驗證後,我用req.session.account = account[0];賬號信息保存到了會議,並返回重定向的URL,會話丟失後重定向

但重定向之後,會話中的帳戶信息丟失了,爲什麼?

+0

請分享更多細節,特別是關於發生的錯誤。 – jkalden

+0

只會在會話中丟失帳號信息,重定向後無法通過'req.session.account'獲取帳號信息。 – Showonne

+0

看看[如何問](http://stackoverflow.com/help/how-to-ask)。你的問題是相當不確定的... – jkalden

回答

0

如果你有一些示例代碼,這將幫助我們追蹤這個問題。我的第一個想法是,以確保express-session正確配置:

var app = express(); 
var session = require('express-session'); 

app.use(session({ 
    secret: 'ibfiyegfiyegfe' // Secret is a required option. 
})); 

獲得進一步的配置選項,請參閱express-session repository

編輯:基於額外的信息,我猜你已經配置了快速會話,也使用cookies來管理會話。這意味着,對於每個HTTP請求,Express都會發送一個包含cookie的響應。基於jQuery的AJAX調用會忽略但響應的cookie,這會導致連續請求快速看起來好像你從來沒有登錄,以便保存使用jQuery執行AJAX請求時,該Cookie,使用xhrFields領域,使withCredentials

$.ajax({ 
    url: "http://....", 
    type: "POST", 
    xhrFields: { 
     withCredentials: true 
    }, 
    data: {username: username, password: password}, 
    success: function(responseBody) { 
     console.log("success!"); 
    }, 
    error: function(responseBody) { 
     console.log("error!"); 
    } 
}); 

希望這會有所幫助。

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)。

但是,當我使用jquery $.ajax relpace fetch,它運作良好。我不知道原因。

+0

請在下方查看我的回覆,感謝您發佈更多信息。 – xaviert

+0

對此有何更新? – xaviert

-1

我有像你一樣的經歷數百次,我終於找到了問題。如果啓用或禁用Cookie,則無需擔心。

您只需要re-declare部分腳本(變量 - 要顯示的數據)在if else條件中。

只要redeclare使用!isset,然後在if else條件中提及兩次的相同變量,如果您瞭解我的意思,則使用相同的變量。

它會反覆回調相同的變量。並確保開始session在頁面上方。無需擔心標題或白線,它實際上與它無關。

我試了一百萬次。你不需要打擾使用ajaxPHP可以做幾乎所有的事情。 cheerio

+0

你的問題是什麼? –