【问题标题】:Session with Django与 Django 的会话
【发布时间】:2019-07-05 14:32:34
【问题描述】:

在主页中,我有一个表单登录。在应用程序“主页”的 view.index 中,经过身份验证后,我创建了会话。之后,如果身份验证正常,我将应用程序称为“Places”,

request.session['user'] = username
request.session.set_expiry(900)
return HttpResponseRedirect('/places/')

在项目的设置中,我配置了 SESSION_SAVE_EVERY_REQUEST = True。

如何将会话发送到项目的所有其他页面,并在会话过期时注销用户?

【问题讨论】:

  • 你应该这样做。 Django 内置了身份验证框架;你应该使用它。

标签: django python-3.x django-users


【解决方案1】:

HTTP 是一种请求响应协议。

这意味着服务器无法在没有客户端发起对话的情况下与客户端进行通信。所以做这样的事情的唯一方法是原生 Django,是让客户端定期检查会话是否仍然正常。

实现此目的的一种方法是使用后台 ajax 调用(可能在 javascript 中使用 setInterval)检查会话,如果它不再有任何好处(过期或用户已被禁用等),则将它们重定向回登录页面。

另一种方法可能涉及将到期时间发送给客户端,以便它仅在会话到期时检查会话(尽管这不会影响用户被禁用),或者有一个 websocket 服务器将此信息推送到客户。

【讨论】:

  • 感谢您的回答,第二种方法似乎更容易,因为我是 django 的初学者。对于客户端的每个请求页面,我可以将到期时间发送给它,并用当前时间进行验证。如果过期,我会注销客户端。这样好不好?
  • 你知道你的要求 - 所以只有你可以说它是否好:) 我担心你的方法可能会导致注销屏幕,即使会话很好(因为用户正在做不同的事情选项卡使会话保持活动状态,但第一页被单独放置足够长的时间以使会话过期)。不管你做什么,在做任何事情之前检查会话可能是个好主意。
猜你喜欢
  • 1970-01-01
  • 2010-09-08
  • 1970-01-01
  • 2021-09-02
  • 1970-01-01
  • 2016-08-31
  • 2011-01-01
  • 2015-01-16
  • 2014-01-13
相关资源
最近更新 更多