我在python中有一个Web应用程序,其中用户提交他们的电子邮件和密码。将这些值与存储在mysql数据库中的值进行比较。如果成功,脚本将生成会话ID,将其存储在数据库中的电子邮件旁边,并设置具有会话ID的cookie,允许用户与视线的其他部分进行交互。
当用户单击注销时,脚本会从数据库中删除会话ID并删除cookie。 Cookie会在5小时后过期。我担心的是,如果用户没有注销,并且cookie过期,脚本将强制他登录,但如果他从之前复制了会话ID,它仍然可以被验证。
如何在5小时后自动从mysql数据库中删除会话ID?
答案 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。)