为什么有些瓶会话值从关闭浏览器窗口后会消失,但后来再次出现没有我加入他们吗?(Why do some

2019-07-04 17:43发布

所以,我的瓶会话的理解是,我可以用它像一本字典,并通过做增加值会话:

会议[“键名”] =“一些价值在这里”

这工作正常。

在我使用AJAX后,客户端调用的路线,我分配一个值到会话中。 并能正常工作。 我可以点击我的网站的各个页面和值停留在会议上。 但是如果我关闭浏览器窗口,然后回到我的网站,会话值我在那里走了。

所以这很奇怪,你会觉得这个问题是会话不是永久的。 我还实施烧瓶OpenID和使用该会话来存储信息,并且坚持,如果我关闭浏览器窗口并打开它再次备份。 我还检查该Cookie关闭浏览器窗口后,但要回到我的网站之前,以及Cookie确实仍然存在。

另一个奇怪的一件行为(可能是相关的)的是,我已经写为测试目的的会议上,一些值将消失,当我访问AJAX后的路线,并指定正确的值。 所以这是奇怪的,但什么是真正奇怪的是,当我再关闭浏览器窗口,然后再次打开它,并因此失去了我试图挽留,我失去了以前的那些实际上返回值! 他们没有被重新分配,因为在我的Python文件重新分配这些值没有代码。

下面是一些输出,以帮手使其更清晰。 他们都来自一个路线outputed一个真正的页面,而不是我上面提到的AJAX后的路线。

这是后我已经指派我想在会话中存储的值输出。 价值关键是“用户ID” - 所有其他值都哑的人我都在试图解决这一问题补充道。 “用户id”:8将停留在会议上,只要我不要关闭浏览器窗口。 我可以访问其他路线和值将呆在那里,就像它应该。

['session.=', <SecureCookieSession {'userid': 8, 'test_variable_num': 102, 'adding using before request': 'hi', '_permanent': True, 'test_variable_text': 'hi!'}>]

如果我关闭浏览器窗口,并返回到现场,但没有重做AJAX POST请求,我得到这样的输出:

['session.=', <SecureCookieSession {'adding using before request': 'hi', '_permanent': True, 'yo': 'yo'}>]

在“哟”价值是不是在第一个第一输出。 我不知道它是从哪里来的。 我搜索我的代码为“哟”并没有指派任何地方该值没有我的情况下。 我想我可能是几天前已经添加到会话。 因此,现在看来似乎是坚持,但其他的值写入时被隐藏。

而这最后一个是我再次访问AJAX后的路线,然后要在使用调试打印出关键的页面。 作为第一输出我上面粘贴的,你所期望的,而“哟”值相同的输出再次消失(但它会回来,如果我关闭浏览器窗口)

['session.=', <SecureCookieSession {'userid': 8, 'test_variable_num': 102, 'adding using before request': 'hi', '_permanent': True, 'test_variable_text': 'hi!'}>]

我在这两个Chrome和Firefox测试这一点。

所以我觉得这一切奇怪,我猜测它的会话是如何工作的误解造成的。 我认为他们是字典,我可以写字典值融入其中,以后只要我的会话设置为永久和cookie不被删除检索这些天。

任何想法,为什么这个怪异的行为是怎么回事?

Answer 1:

原来,问题是多域cookie的事情。 我在本地运行,网址为127.0.0.1:5000,但有时该网站在本地主机访问:5000 - 所以每个这些域有一个单独的cookie。 这解释了为什么数据消失,然后重新出现。 这只是不同的域相关联。

以下仅仅是额外的详细信息

这是约因为Facebook不提供域名,如IP地址。 因此,本地开发的时候,我用127.0.0.1:5000但Facebook的回调URL是本地主机:5000。 这工作得很好,因为瓶拿起在两个URL的请求和对待他们一样的 - 所有路由正常工作。 除其获得与不同的URL相关的会话cookie。



Answer 2:

一旦你关闭浏览器如果您还没有设置烧瓶会话将被删除session.permanent = True 。 也就是说烧瓶工作阶段的定义,并在文档中被提及。

如果然而设置会话为永久性的,那么默认为31天的时候会话将持续。 您可以通过更改默认以及session.permanent_session_lifetime 。 这意味着,本次会议将持续,即使你关闭浏览器当然,除非你手动删除cookie本身。

在你的情况,我不知道你是如何使用AJAX调用,但一般来说,上面的应持有关默认烧瓶会话真。



文章来源: Why do some Flask session values disappear from the session after closing the browser window, but then reappear later without me adding them?