django – 在View中使用redirect()时会话ID发生变化

我有一个页面,其中包含用于网站搜索的表单.表单使用POST动词提交要搜索的数据.提交后,搜索结果将显示在表单下方.

为了解决IE上的“Page has expired”问题,我使用了所谓的PRG模式(http://en.wikipedia.org/wiki/Post/Redirect/Get).所以我从我的view的post()方法返回django.shortcuts.redirect(),该方法重定向到同一个URL.

问题是在生产中我看到与302响应之后发送的GET请求相关联的不同会话ID.因为我将表单存储在会话中以便能够将结果拆分为页面,所以我得到的结果不一致.

我在apache / mod_wsgi下运行django. apache配置为最多运行3个进程.

它在我重新启动httpd后没有发生,似乎它在httpd进程消耗的内存量达到某个限制后开始发生.

我通过反复按下提交按钮来检查这个,表单从会话中填充,这样我就可以看到我输入的搜索字符串.会话更改时,表单返回空白.因此,当这种情况开始发生时,表单连续成功填充2次,当我第三次按提交时,它返回空白,这意味着服务器返回了新的会话cookie.这似乎与ServerLimit设置有关.

怎么了?有任何想法吗?

谢谢

康斯坦丁

最佳答案 您是否尝试过使用HTTP 303请参阅其他响应而不是302?

http://tumblr.jonthornton.com/post/7902581999/preventing-form-re-submission-with-http-303-redirects

点赞