Из разряда «каждый день узнаешь что-то новое». В Firefox (и, возможно, в других браузерах) применяется агрессивное кэширование форм. После обновления страницы, даже если она действительно обновилась, а не была взята из кэша, браузер восстанавливает значения элементов, установленные или введенные пользователем. Это относится, например, к состоянию чекбоксов — на этом месте я и задумался. Получается, что страницу мы перегенерировали, состояние чекбоксов указали (checked="checked"
или пустое), но браузер расставил галочки так, как они стояли до перезагрузки.
В интернете имеют хождение два решения.
- Отправлять заголовок
Cache-Control: no-store
— попробовал, не сработало. По крайней мере, на Firefox 23.0.1. В принципе, логично, ведь к кэшированию страниц это не имеет прямого отношения, это «фича». - Указывать
autocomplete="off"
внутри тега<form>
— сработало. Да, это не валидный XHTML, но это помогает. Можно указывать не для всей формы, а для конкретных ее элементов. Еще кое-что интересное, в том числе про валидацию, есть в статье «Отключайте autocomplete».