因为我在调用expressServer.use(express.session({params}))
时没有定义maxAge,所以Cookie的到期时间设置为"会话"。
我想添加一个"记住我"登录时的功能。如果"记住我"如果被选中,到期时间将延长至一个月。
我该怎么做呢?我试着简单地扩展maxAge,但这似乎没有做任何事......
expressServer.get '/blah', (request, response) =>
request.session.cookie.maxAge = 2592000
response.end 'hello there'
感谢您的帮助!
** 编辑 **
我尝试制作一个简单的服务器来测试更新用户的cookie。我使用的是Express 3.0.4
当我访问127.0.0.1:9000/blah时,浏览器cookie""到期"字段仍然是"会话" ...
express = require 'express'
expressServer = express()
expressServer.use express.cookieParser()
expressServer.use express.session
secret: 'supersecret'
cookie:
path: '/'
httpOnly: true
expressServer.get '/', (request, response) =>
response.end 'hello'
expressServer.get '/blah', (request, response) =>
request.session.cookie.maxAge = 3600000
response.end 'hello again'
expressServer.listen 9000
console.log 'server running'
... Grrrrrrr
答案 0 :(得分:11)
我在/登录页面上有一个“记住我”的复选框:
<p class="remember">
<input type="checkbox" id="remember" name="remember" value="1" />
<label for="remember">Remember me</label>
</p>
然后在我的POST路由到/ login我做一些健全性检查并设置会话如果req.body.remember
被设置,否则它只是一个窗口会话:
//user is authenticated
//set session length
if ( req.body.remember ) {
var hour = 3600000;
req.session.cookie.maxAge = 14 * 24 * hour; //2 weeks
} else {
req.session.cookie.expires = false;
}
req.session.userid = user._id;
在app.js中添加以下几行(我使用redis):
app.use(express.cookieParser('secret-word'));
app.use(express.session({
store: new RedisStore({
host: cfg.redis.host,
db: cfg.redis.db
}),
secret: 'another-secret'
}));
答案 1 :(得分:5)
如果要在express 4中使用cookie-sessions实现滚动会话,请配置如下的中间件:
app.use(cookieSession({
secret: your_secret,
maxAge: your_maxAge,
key: 'sessionId'
}));
请注意,您无需设置expires
选项。
为了扩展你的会话,只需改变它:
app.get('*', function (req, res, next) {
req.session.foobar = Date.now();
next();
}
请注意,在快递4中没有req.session.touch()
。
答案 2 :(得分:3)
将cookie名称设置为value,其中可以是转换为JSON的字符串或对象。路径选项默认为"/"
。
res.cookie('rememberme', '1',
{ expires: new Date(Date.now() + 900000), httpOnly: true });
如需进一步参考,可以使用链接
答案 3 :(得分:2)
我发现answer似乎对我有用;将其添加到您的路线顶部。
app.all '*', (req,res,next) ->
if req.method is 'HEAD' or req.method is 'OPTIONS'
next()
else
req.session._garbage = Date();
req.session.touch();
next();
答案 4 :(得分:0)
或者你可以试试这个,它对我有用:
uint32_t ispr0, ispr1, ispr2, icsr;
#define __WFI() ({ \
uint32_t primask = __get_PRIMASK(); \
__disable_irq(); \
asm volatile("wfi"); \
ispr0 = NVIC->ISPR[0]; \
ispr1 = NVIC->ISPR[1]; \
ispr2 = NVIC->ISPR[2]; \
icsr = SCB->ICSR; \
__set_PRIMASK(primask); \
})