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.