【发布时间】:2016-03-22 20:18:10
【问题描述】:
我有带有中间件的 Django 事件记录应用程序,它记录用户页面浏览量。目前,如果响应码为 200,则保存日志“用户 X 访问页面 Y”,但在重定向的情况下,日志应为“用户 X 已重定向到页面 Y”。
是否可以确定响应(200)是否发生在 302 响应重定向之后?
【问题讨论】:
标签: python django redirect logging django-middleware
我有带有中间件的 Django 事件记录应用程序,它记录用户页面浏览量。目前,如果响应码为 200,则保存日志“用户 X 访问页面 Y”,但在重定向的情况下,日志应为“用户 X 已重定向到页面 Y”。
是否可以确定响应(200)是否发生在 302 响应重定向之后?
【问题讨论】:
标签: python django redirect logging django-middleware
不是真的,至少以任何官方方式。 HTTP 请求是相互独立的。你不能说一个请求跟着另一个请求。这就是如果您需要在页面之间维护状态的原因,您最终会使用会话并传递会话 ID。
出于您的目的,使用会话 ID 来跟踪页面并不可靠,因为用户可以打开多个页面。
我能想到的唯一半可靠的解决方案是在重定向时将跟踪查询字符串附加到 URL。
例如,如果对/foo/ 的某些视图处理请求在您的中间件中返回到/bar/ 的重定向,则将该URL 更改为/bar/?tracking=<something random>。随机部分可以是uuid 或类似的东西。然后,当用户转到该页面时,您可以匹配随机位,从而关联请求来自原始页面 /foo/。请注意,为了使其正常工作,随机位对于所有请求必须是唯一的。
您是否应该使用上述方法,可能不会。它可能不是很可靠,并且可能有许多会破坏的边缘情况。也许您可以更改您的要求以更好地反映 HTTP 特性,因此您不需要想出一些技巧来做您想做的事情?
【讨论】: