【问题标题】:Delete pieces of Session on browser close在浏览器关闭时删除会话片段
【发布时间】:2012-09-02 19:06:30
【问题描述】:

我将在 Django 的会话 cookie 中存储大量信息。我希望这些数据在用户访问网站的整个过程中都保持不变。当他离开时,数据应该被删除,但会话必须保持。我不希望用户每次返回网站时都需要登录。

我找到了在每次用户离开网站时清除整个会话 cookie 的方法,但理想情况下,我只想删除我明确设置的 cookie 的选定部分。有人知道怎么做吗?

【问题讨论】:

  • 我认为你需要让你的问题更清楚一点。什么你想坚持,什么你不想坚持? SESSION_COOKIE_AGE 不满足你吗?

标签: python django session cookies


【解决方案1】:

你有点搞混了。

“Django 的会话 cookie”中唯一存储的是一个 ID。该 ID 指的是存储在会话后端中的数据:这通常是一个数据库表,但也可能是一个文件或缓存位置,具体取决于您的 Django 配置。

现在数据更新的唯一时间是当它被 Django 修改时。您不能自动使数据过期,除非 cookie 本身过期(在这种情况下,整个数据集都保留在会话存储中,但不再与客户端关联)或通过在服务器上运行修改会话的进程以编程方式。

当用户离开网站或关闭浏览器时,服务器端无法得知。因此,管理此问题的唯一方法是在您的服务器上运行一个 cron 作业,该作业获取最后一次修改(例如)两小时前的会话,并遍历它们以删除您要删除的数据。

【讨论】:

  • 好的。这是一个有效的答案,所以我需要一些帮助。我有一个照片应用程序,用户可以在其中查看照片库。通过单击一个按钮,他可以从服务器请求一组新的随机照片。我需要将所有查看过的照片存储在服务器上,以防止用户看到重复。这些存储在会话中。如果用户第二次登录,我希望他能够看到以前查看过的照片,但我也希望保留会话,这样他就不需要再次登录。是否有其他地方可以为特定用户存储这些照片?谢谢!
  • 这应该是一个新问题。诀窍是理解“第二次登录”的意思。你将如何确定?您将如何区分他们在浏览器中打开一个标签在您的网站上打开一个下午,与他们关闭并重新打开?一种方法可能是在会话中将 last_accessed_time 存储在已查看照片列表旁边:在下一次访问时,如果时间戳太旧,则将其从会话中删除,否则使用/更新它。
猜你喜欢
  • 2015-07-03
  • 2013-11-29
  • 2012-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-12
  • 2013-01-09
  • 2013-08-11
相关资源
最近更新 更多