Samesite 是在 webob 1.8 中引入的,但 App Engine 标准环境 SDK 附带 1.1.1 and 1.2.3 作为内置库。
您可以在更新的webob 中尝试vendoring,看看这是否会覆盖内置版本。
一旦安装了支持samesite 的webob 版本,就可以将samesite 关键字参数传递给Response.set_cookie
class MyHandler(webapp2.RequestHandler):
def get(self):
self.response.set_cookie('cookie-name', value='42', samesite='lax')
此示例应用在webapp2_extras.sessions 生成的会话cookie 上设置samesite=strict,假设底层webob 包支持它。
import webapp2
from webapp2_extras import sessions
class HelloHandler(webapp2.RequestHandler):
def dispatch(self):
self.session_store = sessions.get_store(request=self.request)
try:
super(HelloHandler, self).dispatch()
finally:
self.session_store.save_sessions(self.response)
@webapp2.cached_property
def session(self):
return self.session_store.get_session()
def get(self):
self.session['hello'] = 'world'
self.response.headers['content-type'] = 'text/plain'
self.response.write('Hello world')
webapp2_config = {
'webapp2_extras.sessions': {
'secret_key': 's3cr3t',
'cookie_args':{'samesite': 'strict'}
},
}
application = webapp2.WSGIApplication([
webapp2.Route(r'/', handler=HelloHandler),
],
config=webapp2_config)
响应的set-cookie 标头是
session=eyJoZWxsbyI6IndvcmxkIn0=|1595151290|09b22484901689e6eb0411792c8732ef134d2b66; Path=/; SameSite=strict