Web2py 禁用每个控制器的会话 cookie
Web2py disable session cookies per controller
有没有办法在每个控制器级别上不在 web2py 中保存会话 ID 和会话 cookie? global_settings.web2py_disable_session = True
将对整个站点执行此操作,但我希望某些页面保留会话。
如果您不需要使用基于参数的重写系统,您可以使用基于模式的重写系统禁用基于路由的会话。在 routes.py
文件中,您将执行如下操作:
routes_in = [
('/myapp/default/$anything', '/myapp/default/$anything',
dict(web2py_disable_session=True))
]
routes_in
元组的可选第三个元素是字典,将用于更新 request.env
。以上将仅对以 /myapp/default/
开头的路由将 web2py_disable_session=True
添加到 request.env
(另一方面,设置 global_settings.web2py_disable_session=True
会将 web2py_disable_session=True
添加到 request.env
所有请求)。
或者,您可以在不需要会话的任何控制器或操作中简单地调用 session.forget(response)
(或根据请求的路径有条件地在模型文件中调用)。如果尚未创建会话 cookie 或文件,这将阻止它们的创建。虽然更简单,但这种方法比上面的方法效率稍低,因为它仍然会在每个请求上产生会话初始化代码运行。
最后一个替代方法是在 WSGI 处理程序文件中创建自定义 WSGI 应用程序函数,根据请求的路由有条件地将 web2py_disable_session=True
添加到 WSGI 环境字典。然后将修改后的环境字典传给gluon.main.wsgibase
.
有没有办法在每个控制器级别上不在 web2py 中保存会话 ID 和会话 cookie? global_settings.web2py_disable_session = True
将对整个站点执行此操作,但我希望某些页面保留会话。
如果您不需要使用基于参数的重写系统,您可以使用基于模式的重写系统禁用基于路由的会话。在 routes.py
文件中,您将执行如下操作:
routes_in = [
('/myapp/default/$anything', '/myapp/default/$anything',
dict(web2py_disable_session=True))
]
routes_in
元组的可选第三个元素是字典,将用于更新 request.env
。以上将仅对以 /myapp/default/
开头的路由将 web2py_disable_session=True
添加到 request.env
(另一方面,设置 global_settings.web2py_disable_session=True
会将 web2py_disable_session=True
添加到 request.env
所有请求)。
或者,您可以在不需要会话的任何控制器或操作中简单地调用 session.forget(response)
(或根据请求的路径有条件地在模型文件中调用)。如果尚未创建会话 cookie 或文件,这将阻止它们的创建。虽然更简单,但这种方法比上面的方法效率稍低,因为它仍然会在每个请求上产生会话初始化代码运行。
最后一个替代方法是在 WSGI 处理程序文件中创建自定义 WSGI 应用程序函数,根据请求的路由有条件地将 web2py_disable_session=True
添加到 WSGI 环境字典。然后将修改后的环境字典传给gluon.main.wsgibase
.