有没有办法不保存会话ID&在每个控制器级别的web2py中的会话cookie? global_settings.web2py_disable_session = True
将为整个网站执行此操作,但我希望有一些页面可以保留会话。
答案 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);
}
//...
。