【发布时间】:2020-09-01 08:19:27
【问题描述】:
我正在使用 CherryPy 编写软件。我正在使用普通会话,使用“cherrypy.session”。 现在我注意到 Firefox 抱怨我使用了“错误的”samesite-Attribute,并且将来可能不再可用。
有没有办法将 CherryPy 的 session-cookies 的 samesite-Attribute 设置为另一个值?
【问题讨论】:
我正在使用 CherryPy 编写软件。我正在使用普通会话,使用“cherrypy.session”。 现在我注意到 Firefox 抱怨我使用了“错误的”samesite-Attribute,并且将来可能不再可用。
有没有办法将 CherryPy 的 session-cookies 的 samesite-Attribute 设置为另一个值?
【问题讨论】:
这有点棘手,因为已经讨论过好几次了(例如,看here) 这意味着对于 python
打开 ../python3.x/site-packages/cherrypy/_cprequest.py
在文件开头添加如下代码
from http import cookies
cookies.Morsel._reserved.setdefault('samesite', 'SameSite')
关闭并保存
打开 ../python3.x/site-packages/cherrypy/lib/sessions.py
更改以下函数定义
def init(storage_type=None, path=None, path_header=None, name='session_id',
timeout=60, domain=None, secure=False, clean_freq=5,
persistent=True, httponly=False, debug=False,
# Py27 compat
# *, storage_class=RamSession,
**kwargs):
到
def init(storage_type=None, path=None, path_header=None,
name='session_id',
timeout=60, domain=None, secure=False, clean_freq=5,
persistent=True, httponly=False,samesite='lax' debug=False,
# Py27 compat
# *, storage_class=RamSession,
**kwargs):
更改以下内容:
set_response_cookie(path=path, path_header=path_header, name=name,
timeout=cookie_timeout, domain=domain, secure=secure,
httponly=httponly)
到:
set_response_cookie(path=path, path_header=path_header, name=name,
timeout=cookie_timeout, domain=domain, secure=secure,
httponly=httponly,samesite=samesite)
更改以下内容:
def set_response_cookie(path=None, path_header=None, name='session_id',
timeout=60, domain=None, secure=False, httponly=False):
到:
def set_response_cookie(path=None, path_header=None, name='session_id',
timeout=60, domain=None, secure=False, httponly=False,samesite='lax'):
将此代码添加到 set_response_cookie() 方法的末尾:
if samesite in ['lax', 'strict', None]:
cookie[name]['samesite'] = str(samesite)
保存文件并关闭它。
现在在您的代码(驱动程序)中,您可以像这样使用“samesite”属性:
'tools.sessions.samesite': 'strict'
或
'tools.sessions.samesite': 'lax' # This is the default value
祝你好运!
【讨论】: