Несовместимые данные сеанса из IE - кэшированные сеансы? - PullRequest
1 голос
/ 03 июня 2010

Я пытаюсь предотвратить простое мошенничество с кликами на моем сайте и создаю ссылки на основе данных о времени сеанса.

Все работает в FF, но в IE информация, которую я храню в сеансе, каким-то образом изменяется.

Когда я загружаю главную страницу, я устанавливаю переменные сеанса следующим образом

session_start();
$_SESSION['time']=time();

Я выкладываю значение сеанса на страницу, поэтому получаю что-то вроде 1275512393.

Когда пользователь нажимает на ссылку, я отправляю запрос ajax, и эта страница возвращает сеанс, который я помещаю в предупреждение.

session_start();
echo $_SESSION['time'];
die();

Предупреждение возвращается 1275512422.

Только в IE возвращается $ _SESSION ['time'], отличный от исходного $ _SESSION ['time']

Не похоже, что это проблема кеширования, поскольку время всегда ОЧЕНЬ близко друг к другу, а второе всегда после первого, но я не уверен.

-------- update - проблема, вызванная JavaScript на Facebook. решения пока нет --------------

Разбирая код для публикации в соответствии с рекомендациями MANCHUCK, я начал задумываться, не вызывает ли этот фрагмент кода Facebook какую-то проблему

FB.ini ({appId: 'myappid', статус: true, cookie: true, xfbml: true});

так что я удалил это и снова запустил страницу, и теперь времена $ _SESSION совпали !!

Итак, я нашел проблему. Возможно, я как-то подумал, что FB javascript создает сеанс (обратите внимание, что я использую только FB javascript, а не PHP API), который как-то перезаписывает значения моего предыдущего сеанса.

Я отложил нарушающий javascript обратно и попытался изменить имя моего сеанса на $ _SESSION ['mytime'] или $ _SESSION ['time2'], но проблема все еще существовала. Я пытался использовать другие функции времени, такие как дата ('Ymd G: h: s') или дата ('Ymd G: h: s'). 'Test', но при извлечении $ _SESSION время всегда увеличивается на несколько секунд. со второй страницы.

Я удивлен, что что-то подобное может произойти, и не могу представить, как это возможно, но я возвращался к этому 4 раза сейчас, и каждый раз, когда я вынимаю эту одну строчку Javascript, все работает!

К сожалению, не использовать Facebook Connect на самом деле не вариант для этого проекта.

1 Ответ

1 голос
/ 03 июня 2010

Я предполагаю, что главная страница выполняется дважды, что вызывает перезапуск сеанса с новым значением, присвоенным $ _SESSION ['time']. Вот почему он всегда немного увеличивается. Посмотрите логи вашего веб-сервера или используйте Fiddler, чтобы узнать, запрашивается ли страница дважды. Если это так, это может помочь.

...