确定响应是否来自重定向

时间:2015-12-16 15:50:55

标签: python django redirect logging django-middleware

我有带中间件的Django事件记录应用程序,它记录用户页面视图。目前,如果响应代码为200,则保存日志“用户X访问过的页面Y”,但是在重定向的情况下,日志应为“用户X已被重定向到页面Y”。

是否可以确定302响应重定向后是否发生了响应(200)?

1 个答案:

答案 0 :(得分:0)

不是,至少在官方方面。 HTTP请求彼此独立。你不能告诉一个请求跟着另一个请求。这是一个原因,如果你需要在页面之间维护状态,你最终会使用会话并传递会话ID。

出于您的目的,使用会话ID跟踪页面是不可靠的,因为用户可以打开多个页面。

我能想到的唯一半可靠的解决方案是在重定向时向URL添加跟踪查询字符串。

例如,如果对/foo/的某些视图处理请求返回中间件中/bar/的重定向,则将该网址更改为/bar/?tracking=<something random>。随机部分可以是uuid或类似的东西。然后,当用户转到该页面时,您可以匹配随机位,从而关联该请求来自原始页面/foo/。请注意,为了使其工作,随机位必须对所有请求都是唯一的。

您是否应该使用上述方法,可能不是。它可能不太可靠,可能有很多边缘情况会破坏。也许你可以改变你的要求以更好地反映HTTP性质,因此你不需要提出黑客来做你想做的事情?