使用Google App Engine(Python)设置即使在浏览器关闭时也永不过期的cookie /会话

时间:2017-01-25 15:20:11

标签: python google-app-engine session-cookies

我正在尝试使用never expirewebapp2 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,使其永不过期,即使在浏览器退出时也是如此?

2 个答案:

答案 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