|
|
1
44
我完全不同意。TLS非常有用。它应该小心使用,就像全球的人应该小心使用一样;但是说它根本不应该被使用就像说全球的人永远不应该被使用一样荒谬。 例如,我将当前活动的请求存储在TLS中。这使得它可以从我的日志类中访问,而不必通过每个接口传递请求——包括许多根本不关心Django的接口。它允许我从代码中的任何地方创建日志条目;日志记录器将输出到数据库表,并且如果在生成日志时某个请求正好处于活动状态,则它会记录诸如活动用户和正在请求的内容。 如果您不希望一个线程具有修改另一个线程的TLS数据的能力,那么将您的TLS设置为禁止这样做,这可能需要使用本机TLS类。不过,我不认为这一论点有说服力;如果攻击者可以执行任意的python代码作为后端,那么您的系统已经受到致命的威胁——例如,他可以对以后作为其他用户运行的任何代码进行修补。 显然,您需要在请求结束时清除任何TLS;在Django中,这意味着在进程响应中清除它,在中间件类中处理异常。 |
|
|
2
12
尽管您可以混合来自不同用户的数据,但是应该避免使用线程局部变量,因为它们隐藏了依赖关系。如果您将参数传递给一个方法,您将看到并知道您传递的是什么。但是线程局部类似于背景中的隐藏通道,您可能会想,在某些情况下,方法不能正常工作。 在某些情况下,线程局部变量是一个很好的选择,但是它们应该很少和小心地使用! |
|
|
3
10
有关如何创建与最新django 1.10兼容的TLS中间件的快速示例:
|