1
我不確定它是關於django,而是javascript和瀏覽器。Django中的會話被JS更改時有什麼不對嗎
我的觀點:
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()
而地方location.reload()Django的會話 「rollbacked」 到以前的狀態。
在Chrome上添加自己的睡眠方法js(1秒)之前location.reload它的工作原理 在Firefox上存在問題。
我不使用cookie,除了會話一。 我試着清理瀏覽器緩存,會話,但沒有成功。 我可以在不同的瀏覽器版本上重複這一點。
我有解決方法,但我很好奇發生了什麼事。
當我從js location.reload()
中刪除,然後執行POST/GET請求將正確處理會話。
F5 refresh
set_lang之後也一直有效(會話正確更改)。
我比較location.reload
和F5 refresh
之間的http標題,它們是相同的。
當你做'返回HttpResponse('ok')'它不會鬆動上下文嗎?我會嘗試'返回HttpResponse(request.session)'看看它打印什麼 – karthikr
不,set_lang的作品,我可以返回改變的會話,會話在下一個請求丟失('location.reload()',只有這個) –