Python中实现remember me功能时,token的过期时间一般设置多久为好?

当前用的 flask,flask-login,flask-session

1,flask-login 为实现 remember me 功能,登录时给一个 token 存在 cookie 里,设置一个 cookie 过期时间。
2,服务端使用 redis 存 session,也有设置一个过期时间

有一个问题就是如果 remember me 的过期时间比 session 久的话,session 的过期时间就没有效果了 比如把 remember me 设置一天, 服务器 session 过期时间设置 2 小时( 2 小时没有请求,就强制登出),但不操作 2 小时以后再请求,服务器 flask-login 直接就用 remember me 的 token 登录了,相当于 session 的过期时间就失效了。

所以我想问,这两个过期时间分别设置多久比较好?当前只能设置成两个过期时间一样,来达到需求,还是说一般这种都是设置成一样的?


Python中实现remember me功能时,token的过期时间一般设置多久为好?

8 回复

如果只使用 cookie 就可以完成登录,session 就没有作用
如果想要使用 session 控制登录状态,在使用 cookie 登录的过程中就必须校验 session


对于“记住我”功能的token过期时间,没有绝对标准,但通常建议设置为30天到90天之间。

选择时主要考虑:

  1. 安全性:时间越长风险越高,容易被窃取后长期利用。
  2. 用户体验:太短(如7天)会频繁要求重新登录,太长(如1年)则降低安全性。
  3. 常见实践:很多网站设为30天,部分可信应用(如内部工具)可延长至90天。

如果你用Flask或Django实现,可以在生成token时设置exp字段(JWT标准)或在数据库中记录过期时间。例如用itsdangerous(Flask常用):

from itsdangerous import TimedJSONWebSignatureSerializer as Serializer
from datetime import datetime, timedelta

def generate_remember_me_token(user_id, expires_days=30):
    s = Serializer('your-secret-key', expires_in=expires_days*24*3600)
    return s.dumps({'user_id': user_id}).decode('utf-8')

def verify_remember_me_token(token):
    s = Serializer('your-secret-key')
    try:
        data = s.loads(token)
        return data['user_id']
    except:
        return None

总结:折中选30天,根据应用场景调整。

仔细想想好像是这么回事,用 cookie 登录时验证 session 的话,cookie 过期时间就没有效果了,看来要么就把 remember me token 的过期时间设置的比 session 过期时间短,要么就设置成一样的,才能实现两个需求

为什么要同时用 cookie 和 session ?

#3 cookie 记录 session 的 key

如果发现 token 没有过期,就自动创建一个新 session 不就可以了?

对呀,现在就是这样,所以 sission 的过期时间就相当于无效了

不知道你的 token 是怎么实现的,用 JWT 的思想的话,过期时间是加密保存在 token 里的,这样可以 session 没过期就只验证 session,session 过期了就检查 token 是否过期,没有过期就创建一个新 session。

回到顶部