2017-05-08 92 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