2017-05-08 91 views
0

我正在尋找過期會話的方式。這是我的計劃 我想生成RSA公鑰/私鑰取決於用戶到達我的網站時的會話。我在公共密鑰到達我的網站時發送公共密鑰,當他們嘗試登錄時,他們使用公鑰對其ID/PW進行加密,服務器使用私鑰對其解密。我需要在用戶登錄後每次會話都過期,或者只是離開網站以節省服務器內存。所以我決定爲任何會話設置超時時間。無論他們是否登錄,每個會話都將以這種方式被刪除。在快速會話中過期不起作用

我發現我可以使用'expires'屬性使會話在特定時間後被刪除,但它不起作用。

這是我的代碼

var RedisStore = require('connect-redis')(session); 
var redis = require("redis").createClient(); 
app.use(session({ 
    store: new RedisStore({host: 'localhost', port:6379, client:redis, 
resave:false}), 
    secret: 'keyboard cat', 
    expires : '1000' 
})); 


app.get('/logincheck', function(req, res){ 

    console.log('session check : ' + req.session.redSession); 
    if(req.session.redSession){ 
    res.json({ 
     result : 'on' 
    }); 
    } 
    else { 
    res.json({ 
     result : 'off' 
    }); 
    } 
}); 


app.post('/login', function(req, res) { 
req.session.redSession = req.body.id; 
console.log('session check : ' + req.session.redSession); 

if (req.body.id == 'fuck' && req.body.password == 'you') { 
    res.json({ 
     message: 'ㅊㅋ' 
    }); 
    //sess.id = req.body.id; 
    return; 
} else { 
    res.json({ 
     message: 'fuck you' 
    }); 
    return; 
} 
}); 

我登錄,等待超過一秒鐘,發送/ logincheck但我「上」了。正如我所預料的那樣,會話應該在一秒鐘內過期,它會自行退出,因此req.session.redSession中不應該有任何內容,因此它必須返回「off」。但它保持返回'開'和console.log('會話檢查:')保持返回字符串(不確定)在服務器端。

我在想什麼錯?如何讓會話在一秒後消失?

回答

0

expirescookie選項(而不是「直接」選項)的屬性,你應該使用maxAge而不是expires

app.use(session({ 
    store : new RedisStore({host: 'localhost', port:6379, client:redis, 
resave:false}), 
    secret : 'keyboard cat', 
    cookie : { 
     maxAge : 1000 
    } 
})); 

根據您的設置,可能還需要其他的選項是設置(所以consult the manual)。

+0

我剛編輯我的代碼,因爲你寫,到期到cookie但仍然有同樣的問題 – HyeonWoo

+0

會話不會過期 – HyeonWoo

+0

請確保所有以前的cookie已從您的瀏覽器中刪除。 – robertklep