2013-02-24 15 views
0

我想實現像這樣的快遞和護照的會議一個新的會話:ExpressJS創建的每一頁變化

app.use(connect.bodyParser()); 
    app.use(express.cookieParser()); 
    app.use(express.session({ 
    cookie: { 
     path: "/", 
     httpOnly: true, 
     maxAge: null 
    }, 
    store: redisStoreConnect, 
    secret: "something", 
    key: 'pksy.sid' 
    })); 
    app.use(passport.initialize()); 
    app.use(passport.session()); 

    passport.serializeUser (user, done) -> 
    done null, user.email 
    return 

    passport.deserializeUser (email, done) -> 
    User.findOne 
     email: email 
     , (err, user) -> 
     done err, user 
     return 
    return 

如果我瀏覽到一個網頁在我的網站,創建一個新的會話,並存儲在Redis的。如果我刷新該頁面,會話似乎會持續。如果我導航到新頁面,或者即使關閉了選項卡並重新打開到同一頁面,也會創建新會話。

這特別令人沮喪,因爲護照只驗證爲我的登錄頁面生成的會話。如何讓我的會話在多個頁面上持續存在?

更新:感謝@robertklep提醒我檢查瀏覽器實際發回的cookie(我應該這樣做才能啓動)。事實證明,瀏覽器正在發送正確的cookie,並且驗證正在工作。這些會話實際上是持久的,但由於某種原因,每個頁面請求都會創建一個新的會話(未被瀏覽器使用)。我怎樣才能阻止呢? 「

+0

你如何配置護照?另外,如果將maxAge設置爲超時值(會話可以有效的毫秒數),它有幫助嗎? – robertklep 2013-02-24 06:51:17

+0

我將maxAge設置爲604800000,並且錯誤仍然存​​在。這是我認爲會影響會話內容的唯一兩條通行證。除了他們,我只是使用本地策略和匿名策略。 – 2013-02-25 01:11:44

+0

你也使用'passport.serializeUser()'和'passport.deserializeUser()'嗎? – robertklep 2013-02-25 06:07:45

回答

3

」哦,你不知道瀏覽器不會發送會話cookie與favicon的請求嗎?「黑客說,我的老闆說,他的意思創造了下面的單行代碼的需要。

11小時調試以後這裏就是解決了這個問題:

app.use express.favicon() 

快遞是治療像任何其他資源的圖標,而瀏覽器正在爲它專門的,顯然Cookie的請求。 Express假定此請求必須來自沒有會話cookie的客戶端,因此它爲它們創建了一個新會話;一個會議永遠不會再被召喚。 express.favicon()節省一天!

+1

可能與你調用中間件的順序有關,但是,嘿,當它工作時作品;) – robertklep 2013-02-26 06:39:47

0

在我來說,我必須使用

app.use(passport.initialize()); 
app.use(passport.session()); 

app.use(app.router); 

希望這可以幫助。

相關問題