我正在尝试使用never expire和webapp2 sessions的文档在Google App Engine中将Cookie设置为building a response(即使在浏览器关闭后)。我试过了:
代码段1:
from webapp2
from webapp2_extras import sessions
class MainHandler(webapp2.RequestHandler):
def never_expire_session(self):
sessions.get_session(name='my_session', max_age=2147483647)
@login_required
def get(self):
....
html_template = JINJA_ENVIRONMENT.get_template('index.html').render(myapp)
self.response.out.write(html_template)
OR
代码段2:
class MainHandler(webapp2.RequestHandler):
def never_expire_session(self):
return self.response.set_cookie('my_session', max_age=2147483647)
@login_required
def get(self):
....
html_template = JINJA_ENVIRONMENT.get_template('index.html').render(myapp)
self.never_expire_session()
self.response.out.write(html_template)
代码段2会产生NoneNone
的回复。 (不确定第一个代码段的输出。)
我还尝试了答案here,建议配置参数:
config = {}
config['webapp2_extras.sessions'] = {'session_max_age': 2147483647}
....
....
app = webapp2.WSGIApplication([
....
], debug=True, config=config)
我已经清除了我的cookie,重新启动了我的浏览器,并检查了控制台,并且cookie值显示为随机生成的数字和字母序列,并且cookie的到期时间设置为datetime.now
的一年。我没有尝试过任何工作。
如何正确设置会话cookie,使其永不过期,即使在浏览器退出时也是如此?
答案 0 :(得分:0)
我遇到了一个缓存问题,导致我的会话cookie无法在开发者控制台中显示并被应用。删除浏览器历史记录并重新启动计算机后,它清除了缓存。最终我得到了以下内容:
from webapp2
class MainHandler(webapp2.RequestHandler):
def get(self):
the_value = ''.join(SystemRandom().choice(string.digits _ string.ascii_lowercase) for_in range (50))
max_age = 2147483647
# max age for Internet Explorer
cookie_expires = datetime.datetime.now() + datetime.timedelta (200)
return self.response.set_cookie('my_cookie', the_value, max_age=max_age, httponly=True, secure=True)
注意:如果您要将此更改应用于特定Cookie,请将“my_cookie”重命名为该Cookie(即“ SACSID ”是许多Google应用中的Cookie)
答案 1 :(得分:0)
我们甚至可以使用webapp2_extras.sessions
来执行此操作,而无需使用response.set_cookie(...)
。 webapp2_extras.sessions中有一个default_config字典,只需将max_age设置为2147483647或任何适合您的时间(以秒为单位),它都应该起作用。就我而言。查看official documentation,了解有关default_config的更多信息。
sessions.default_config['cookie_args']['max_age'] = 2147483647