1

我在 webapp2 应用程序中有以下要求。当用户离开他的机器或浏览器时,应该终止该用户之前的身份验证会话。

当用户从另一台机器登录时,我可以通过在登录时将 remote_addr 存储在用户对象中来执行此操作。当请求用户的会话时,我在登录时检查请求中的 remote_addr 与用户的 remote_addr。

我对这个解决方案不满意,因为当用户在代理服务器后面时它不起作用,而且当用户使用不同的浏览器时它也不起作用。

webapp2 是否在某处存储会话 ID,因此我可以使用它来查看用户是否已登录新会话?

4

3 回答 3

0

修改你已经做的事情:当用户登录时,创建唯一/随机令牌并将其存储在用户对象中,并在浏览器中设置一个 cookie。当请求用户会话时,检查两个令牌(来自请求 cookie 和用户对象)是否匹配,如果不匹配,则刻录会话。

它是一样的,但不是remote_addr使用您在登录时生成并设置为 cookie 的随机令牌。

于 2012-09-24T09:58:58.967 回答
0

当您第一次在浏览器会话中打开网站时,会创建一个站点会话。

当他登录时,您只需将会话 ID 存储在数据库中。您需要有一个带有活动登录的漂亮表。如果您想让他在稍后关闭并重新启动浏览器时保持登录状态,您也可以在他的浏览器中设置一个 cookie。显然,如果 cookie 存在,则将会话 id 修改为 cookie 中的那个。

Cookie 不会在浏览器之间共享,因此在这种情况下,如果他从新浏览器登录,您会更改活动登录表中的会话 ID。

此外,您还需要一个小型 ajax 来检查当前会话是否每 5 分钟左右仍然处于活动状态,如果没有,则将其注销。

于 2012-09-26T15:45:00.923 回答
-1

http://webapp-improved.appspot.com/api/webapp2_extras/sessions.html讲述了“会话ID”。

另请参阅 Nick Johnson 在webapp2-for-authentication-and-login的回答,以及使用 ndb library
的数据存储的示例实现。

于 2012-09-22T16:21:40.633 回答