我在webapp2应用程序中有以下要求。当用户离开他的机器或浏览器时,应终止该用户以前的身份验证会话。
当用户从另一台计算机登录时,我可以通过在登录时将remote_addr存储在User对象中来执行此操作。当请求用户的会话时,我在登录时根据用户的remote_addr检查remote_addr。
我对这个解决方案不满意,因为当用户在代理服务器后面时它不起作用,并且当用户使用不同的浏览器时它也不起作用。
webapp2是否在某处存储了会话ID,因此我可以使用它来查看用户是否已在新会话中登录?
答案 0 :(得分:0)
修改您已经做的事情:当用户登录时,创建唯一/随机令牌并将其存储在用户对象中,并在浏览器中设置cookie。当请求用户的会话时,检查两个令牌(来自请求cookie和用户对象)是否匹配,如果不匹配,则烧毁会话。
它只是相同但不是remote_addr
而是使用您在登录时生成并设置为cookie的随机令牌。
答案 1 :(得分:0)
当您在浏览器会话中首次打开网站时,会创建一个网站会话。
当他登录时,您只需将会话ID存储在数据库中。 您需要有一个包含活动登录的漂亮表。 如果您希望在他关闭并稍后重新启动浏览器时让他保持登录状态,您也可以在浏览器中设置cookie。 显然,如果cookie存在,则将会话ID修改为cookie中的会话ID。
浏览器之间不共享Cookie,因此在这种情况下,如果他从新浏览器登录,则会更改活动登录表中的会话ID。
此外,您还需要一个小的ajax来检查当前会话是否每5分钟左右仍处于活动状态,如果没有则将其记录下来。
答案 2 :(得分:-1)
http://webapp-improved.appspot.com/api/webapp2_extras/sessions.html讲述“会话ID”。
另见Nick Johnson在webapp2-for-authentication-and-login的答案,
以及datastore using ndb library的示例实现。