在python Web应用程序中自动注销

时间:2010-04-28 17:44:40

标签: python mysql logging web-applications

我在python中有一个Web应用程序,其中用户提交他们的电子邮件和密码。将这些值与存储在mysql数据库中的值进行比较。如果成功,脚本将生成会话ID,将其存储在数据库中的电子邮件旁边,并设置具有会话ID的cookie,允许用户与视线的其他部分进行交互。

当用户单击注销时,脚本会从数据库中删除会话ID并删除co​​okie。 Cookie会在5小时后过期。我担心的是,如果用户没有注销,并且cookie过期,脚本将强制他登录,但如果他从之前复制了会话ID,它仍然可以被验证。

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

2 个答案:

答案 0 :(得分:1)

您可以将到期时间编码为会话ID的一部分。 然后,当您验证会话ID时,您还可以检查它是否已过期,如果是,则强制用户再次登录。

您还可以定期清理数据库,删除过期的会话。

答案 1 :(得分:0)

您必须在数据库中为会话ID添加时间戳,以了解它何时耗尽。

更好的是,将时间戳作为会话ID本身的一部分,例如:

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

这样您的脚本只需查看前面的数字是否仍然是有效的会话ID就可以看到。

更好的是,使到期时间戳成为会话ID的用户ID部分,并使末尾的位成为用户ID,到期时间和密钥的加密哈希值。然后,您可以验证ID 知道它所属的用户,而无需在数据库中存储任何内容。 (Related PHP example。)