request.session.modified 对比 SESSION_SAVE_EVERY_REQUEST

request.session.modified vs SESSION_SAVE_EVERY_REQUEST

我了解它们在实践中的工作方式有何不同。例如,如果我有:

request.session.['cart'].remove('item')

如果不显式调用 request.session.modified = True

,会话将不会被保存

或在 settings.py 中有 SESSION_SAVE_EVERY_REQUEST = True

或者我可以通过以下方式绕过使用:

cart = request.session['cart']
cart.remove('item')
request.session['cart'] = cart

我的问题是使用 SESSION_SAVE_EVERY_REQUEST 是否有任何缺点,无论是在性能方面还是在意想不到的后果方面。如果我修改了其中的值,我不明白为什么我不想保存会话。

(…) if there is any drawback to using SESSION_SAVE_EVERY_REQUEST whether in performance or unintended consequences. I don't see any reason why I wouldn't want to save the session if I modified a value in it.

那么 SESSION_SAVE_EVERY_REQUEST 将保存会话 每次 时间。不管你是否做了 hanges,因为 Django 不能(完美地)检测到。因此,这意味着在每个请求结束时,会话将被序列化。

会话存储在服务器端。它将使用会话密钥在客户端浏览器中设置一个cookie,但会话本身的数据存储在服务器端。有几种存储会话的方法,这可以在 e(内存)缓存中完成,也可以在文件系统或数据库中的文件中完成。特别是最后两个会在文件系统 I/O 或数据库查询方面产生一些开销。虽然这些操作可能不会成为瓶颈,但它是查询或磁盘的额外来源 I/O,因此会对性能产生一些影响,并且可能会影响托管应用程序的价格。