Web2py禁用每个控制器的会话cookie

时间:2018-05-09 12:07:03

标签: session-cookies web2py

有没有办法不保存会话ID&在每个控制器级别的web2py中的会话cookie? global_settings.web2py_disable_session = True将为整个网站执行此操作,但我希望有一些页面可以保留会话。

1 个答案:

答案 0 :(得分:1)

如果您不需要使用基于参数的重写系统,则可以使用基于模式的重写系统禁用基于路由的会话。在routes.py文件中,您可以执行以下操作:

routes_in = [
    ('/myapp/default/$anything', '/myapp/default/$anything', 
     dict(web2py_disable_session=True))
]

routes_in元组的可选第三个元素是一个字典,用于更新request.env。上述内容仅会为web2py_disable_session=True添加request.env /myapp/default/,而global_settings.web2py_disable_session=True的设置为web2py_disable_session=True,另一方面,会request.env添加session.forget(response) web2py_disable_session=True对于所有请求)。

或者,您可以在任何不需要会话的控制器或操作中调用gluon.main.wsgibase(或根据请求的路径在模型文件中有条件地调用)。如果尚未创建会话cookie或文件,则会阻止创建它们。虽然更简单,但此方法的效率略低于上述方法,因为它仍会导致会话初始化代码在每个请求上运行。

最后一种方法是在WSGI处理程序文件中创建一个自定义WSGI应用程序函数,该函数根据请求的路由有条件地将gulp-bower添加到WSGI环境字典中。然后将修改后的环境字典传递给public static string[] PStoPDFArguments(string fileName) => new string[] { "-dBATCH", "-dNOPAUSE", "-sDEVICE=pdfwrite", "-sPAPERSIZE=a4", "-dPDFSETTINGS=/prepress", $"-sOutputFile=\"{fileName}\"", "-" }; //... public override void StdIn(out string input, int count) { var buffer = new char[count]; Console.In.ReadBlock(buffer, 0, count); input = buffer[0] == '\0' ? null : new string(buffer); } //...