为CherryPy的会话设置samesite-Attribute

时间:2020-09-01 08:19:27

标签: python cookies cherrypy

我正在使用CherryPy编程软件。我正在使用“ cherrypy.session”正常会话。 现在,我注意到Firefox抱怨我使用的是“错误的” samesite-Attribute,并且将来可能不再可用。

是否可以将CherryPy的会话cookie的samesite-Attribute设置为另一个值?

1 个答案:

答案 0 :(得分:1)

这已经有些技巧了(例如,看起来here) 这意味着显然没有针对python <3.8的解决方案。 但是,您仍然可以使用Monkeypatch。 因此,请执行以下操作来解决该问题:

  1. 打开../ python3.x / site-packages / cherrypy / _cprequest.py

  2. 在文件开头添加以下代码

     from http import cookies
     cookies.Morsel._reserved.setdefault('samesite', 'SameSite')
    
  3. 关闭并保存

  4. 打开../ python3.x / site-packages / cherrypy / lib / sessions.py

  5. 更改以下函数定义

    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):
  1. 更改以下内容:

      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)
  1. 更改以下内容:

    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'):
  1. 将此代码添加到set_response_cookie()方法的末尾:

     if samesite in ['lax', 'strict', None]:
         cookie[name]['samesite'] = str(samesite)
    
  2. 保存文件并关闭它。

现在,在代码(驱动程序)中,您可以使用“ samesite”属性,如下所示:

'tools.sessions.samesite': 'strict'

'tools.sessions.samesite': 'lax' # This is the default value

祝你好运!