【问题标题】:Session lost while on PythonAnywhere Web2Py but NOT locally在 PythonAnywhere Web2Py 上会话丢失但不在本地
【发布时间】:2016-05-13 07:43:06
【问题描述】:

我使用会话变量通过重定向传递一些信息:

session.OrigText = XML(str(OrigText))
redirect(URL('SearchResultsOrigText'))

它到达新的 URL/页面/视图 - SearchResultsOrigText - 并且工作正常。 但是当从那个新的 URL - SearchResultsOrigText- 我离开时(我从这个新页面去哪里并不重要),当使用浏览器的“后退”按钮返回时,session.OrigText 现在是空的(显示为'无')。

此行为仅在 PA 上发生,而不是在本地发生。 我不在代码中的任何地方使用 session.forget。

试图将 OrigText 中的“html 重”内容作为字典变量(不是会话变量)传递给我另一个有趣的问题……Python Anywhere 说“出了点问题 502-后端”。 (静默失败?)这发生在 PythonAnywhere 上,但在本地也没有。 清理这个变量并没有帮助......

但是让我们专注于第一个问题...... 为什么会话变量在 1.redirect 和 2.离开新页面/视图后丢失 - 当托管在 PythonAnywhere 而不是本地时?

谢谢

【问题讨论】:

  • 很难说不知道更多细节。如果您从登录转换为注销或从 HTTP 转换为 HTTPS(并已设置 session.secure()request.requires_https()),会话可能会被清除或更新。检查浏览器开发者工具并查看 same 会话 cookie 是否在每个请求中来回发送。

标签: session-variables web2py pythonanywhere


【解决方案1】:

Flask 会话,默认情况下使用 cookie,因此您可能在设置中的某个位置设置了要在哪个域上设置 cookie,但设置不正确。也可能是您没有为会话设置密钥。

【讨论】:

  • 它是 PythonAnywhere 上的 Web2Py - 不是 Flask。而且我注意到错误并不总是出现:有时会话变量会丢失,有时不会:在同一个网络上。
【解决方案2】:

我最近在 PythonAnywhere 遇到了同样的问题。我通过从 Firefox 中删除我的域的 cookie 来解决它。不过,我仍然不知道他们是怎么搞砸的。

【讨论】:

    【解决方案3】:

    确保您的代码或框架代码中没有“session.forget(response)”。

    【讨论】:

    • 我没有在代码中的任何地方使用 session.forget。这可能被 Web2Py 或 PythonAnywhere 在幕后使用吗?
    • 我会将会话变量转储到日志中,然后在会话中设置日期时间,以便您看到每次命中时设置的最后一个值。也可能与浏览器缓存设置本地与网络有关?只是一些想法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-20
    • 2017-04-05
    • 2012-01-13
    • 1970-01-01
    • 2011-11-11
    • 2017-01-08
    相关资源
    最近更新 更多