Python 웹 앱中的自动注销

1 投票
2 回答
717 浏览
提问于 2025-04-15 22:07

我有一个用Python写的网页应用,用户需要提交他们的邮箱和密码。这些信息会和存储在mysql数据库里的数据进行比较。如果匹配成功,程序会生成一个会话ID,并把它和邮箱一起存储在数据库里,同时设置一个包含会话ID的cookie,这样用户就可以在网站的其他部分进行操作。

当用户点击注销时,程序会从数据库中删除会话ID,并删除cookie。这个cookie会在5小时后过期。我担心的是,如果用户没有注销,而cookie过期了,程序会强制他重新登录,但如果他之前复制了会话ID,仍然可以通过验证。

我该如何在5小时后自动从mysql数据库中删除会话ID呢?

2 个回答

0

你需要在数据库中给会话ID加上一个时间戳,这样才能知道它什么时候过期。

更好的方法是把时间戳直接放进会话ID里,比如:

Set-Cookie: session=1272672000-(random_number);expires=Sat, 01-May-2010 00:00:00 GMT

这样一来,你的脚本只要看看前面的数字,就能知道这个会话ID是否还有效。

更进一步,可以把过期时间和用户ID都放进会话ID里,然后在最后加上一个加密哈希值,这个哈希值是由用户ID、过期时间和一个秘密钥匙生成的。这样,你就可以验证这个ID,并且知道它属于哪个用户,而不需要在数据库里存储任何东西。(相关的PHP示例.)

1

你可以把过期时间放在你的会话ID里。这样,当你检查会话ID的时候,也可以看看它是否已经过期,如果过期了,就让用户重新登录。

你还可以定期清理你的数据库,删除那些已经过期的会话。

撰写回答