JS更改django中的会话时出现问题

Something wrong when session in django is changed by JS

本文关键字:问题 会话 更改 django JS      更新时间:2023-09-26

我不确定这是关于django,而是关于javascript和浏览器。

我的观点:

def set_lang(request, lang):
  request.session['lang'] = lang   
  # request.session.modified = True  # optional, to be pretty sure
  # request.session.save()  # the same
  return HttpResponse('ok')

在html中,在js:中

$.post('/set_lang', {'lang', 'EN'});   # it change session and works
location.reload()

where while location.reload()django会话被"回滚"到以前的状态。

在chrome上,当我在定位之前在js中添加自己的睡眠方法时(1sec)。加载它有效关于firefox的问题无论如何都存在。

除了会话一,我不使用cookie。我尝试清理浏览器缓存,会话,但没有成功。我可以在不同的浏览器版本上重复这一点。

我有变通办法,但我很好奇发生了什么。

当我从js location.reload()中删除,然后执行POST/GET请求时,会用正确的会话处理。

set_lang之后的F5 refresh也始终有效(会话更改正确)。

我比较了location.reloadF5 refresh之间的http头,它们是相同的。

看起来location.reload不允许$.post

$.post(url, data);
// sleep(2000) // own func with timeout works only in chrome for me
location.reload();

我问自己张贴是否有足够的时间发送并在jQuery.post文档中找到解决方案

当我将代码更改为:时

$.post(url, data).done(function(data{window.location.reload();})

它现在在每个浏览器中都可以工作:)