Сохранение состояния

Мне нужно сделать страничку на которой выбираются два независимых параметра (см. иллюстрацию). При этом, после выбора первого параметра страничка должна перезагрузиться и в Результат должны быть выведены записи, удовлетворяющие этому параметру. Кнопка выбранного параметра должна быть после этого как-то помечена (цветом, рамкой и т.д.). Далее, может быть выбран второй параметр. При этом, страница опять перезагружается и в Результате должны быть выведены записи удовлетворяющие уже двум параметрам. При этом, должны быть помечены уже две кнопки - та, которую нажимали первый раз и та, которую нажимали во второй раз.

Варианты решений:

  1. Вроде самое ествественное - сделать через сессию. Что не нравится - сессия не всегда работает, если отключены куки. Есть вариант использования параметра: session.use_trans_sid, но у меня это что то не заработало - никакого GET параметра к ссылкам автоматически не добавляется. И втрое возражение - как на все на это посмотрит бот поисковика?

  2. Второй вариант: указанные кнопки - это реально кнопки (submit) формы, которые находятся внутри одной формы. При нажатии на кнопку происходит передача через $_POST - во-первых её собственного value, во-вторых, значения hidden поля, в котором сохранен предыдущий выбор для другого (независимого) ряда кнопок. Полученные параметры превращаются сервером в GET параметры - формируется строчка для переадресации и на неё производится переадресация. Последнее делается затем, чтобы работали кнопки "Вперед"-"Назад" браузера. При прорисовке страницы кнопки помечаются в соответствии с GET параметрами.

Тут вроде все красиво, за исключением того, что будет трудно заставить кнопки выглядеть как ссылки (они будут в любом случае визуально "нажиматься"). Во вторых, - опять же - поисковики… вся эта переадресация. Да и потом, поисковики вроде бы не "смотрят" на кнопки форм. Таким образом, снижаются возможности индексации.

  1. Сделать через JavaScript. Тут возможностей и вариантов решений хватает, но - что если отключены ява скрипты? И опять же - индексация.

Что выбрать? что делать? какие еще могут быть варианты?

Тут как раз будет отлично работать вариант с JavaScript. А для индексации поисковикам можно скормить список всего контента в виде «карты сайта».

Так, а если сделать комбинированно? То есть, для отключенного JavaScript использовать сессии (кстати только что , каким то чудом, заработало авто-добавление PHPSIDID к ссылкам), а в остальных случаев применять AJAX механизмы компонент.

Сказанное - рассуждения вслух… пока еще и не представляю как это все совместить и вообще колеблюсь. Например - что опять же "подумает" бот, глядя на сслыки вида:


<a href="/mysite/index.php?PHPSESSID=5ngmsmhn0lau115u5liki64i16">Index</a>

Или боты понимают куки?

Ну, можно и комбинировано. Почему нет?

Хорошие боты (Google, Yandex) давно понимают и куки и JavaScript и даже Flash.

Вот такой вариант:


'session'=>array(

            'class' => 'CDbHttpSession',

            'autoStart'=>true,

            'sessionTableName' => '_session_',

            'connectionID' => 'db',

            'useTransparentSessionID' => true,

            'cookieMode' => 'none',

        ),

не работает. В том смысле, что в таком варианте PHPSESSID к ссылкам не добавляется.

Работает, когда выставляю параметры в php.ini :


session.use_trans_sid = 1

session.auto_start = 1



а конфигурацию меняю на:


'session'=>array(

            'class' => 'CDbHttpSession',

            'autoStart'=>false,

            'sessionTableName' => '_session_',

            'connectionID' => 'db',

            'useTransparentSessionID' => false,

            'cookieMode' => 'none',

        ),

Тогда к ссылкам автоматичски добавляется параметр.

Вообщем похоже что как то криво реализована эта возможнсть в Yii :frowning:

Вообще session.use_trans_sid = 1 (и любой другой способ показать ID сессии в GET) приводят к возможности фиксации сессии и очень не рекомендуются к использованию: http://phpsec.org/projects/phpsecinfo/tests/use_trans_sid.html

К тому же, некоторые глуповатые боты считают странички с разными ID сессии разными.

Что касается пользователей с отключенными куками… их очень мало. Настолько мало, что можно их не учитывать. Отключили — сами виноваты.