16:51

Пропускай все через сердце
Здравствуйте.
Не знаю, как грамотнее объяснить пробелему.
Делаю регистрацию и авторизацию.
Возникает небольшой баг с авторизацией.
Пользователь ввел логин и пароль в формочке, его перенаправили к обработчику, обработчик сообщил, "Добро пожаловать Вам".Все замечательно, меня узнали.
И потом при возврате на другие страницы, не сразу выводится сообщение "вы опознаны как ***".
Т.е. я вернулась на сайт от обработчика, меня видят как Гостя. Дважды перешла по любым ссылкам - и бац, меня уже опознают под моим логином.
С чем это может быть связано и как решить эту проблему?
Буду благодарна за подсказки)
Если надо, могу приложить код)

@темы: Сессии, PHP, Вопросы

Комментарии
28.04.2010 в 16:58

There I was on a July morning, Looking for love
.masa
Да с чем угодно. Все зависит от реализации сайта. Что первое в голову приходит, без дополнительной инфы, кеш браузера или сайта (неправильно настроенный).
28.04.2010 в 17:02

Пропускай все через сердце
SpiritEagle я проверяла не только у себя, и на разных браузерах - только после 3 клика работает как надо.
Тоже новичок в этом деле)
Одно дело, если бы вообще не срабатывало, другое - что не сразу...
28.04.2010 в 17:49

There I was on a July morning, Looking for love
.masa
Сайт ты писала ?
28.04.2010 в 17:52

 
Да, пожалуй, будет гораздо проще, если покажете код :)
28.04.2010 в 18:02

Пропускай все через сердце
SpiritEagle Да, я сама делаю.
Регистрацию делала правда по статье в инете, но видоизменяя немного, как мне надо.
сейчас покажу код.
28.04.2010 в 18:09

Пропускай все через сердце
Это правый блок меню, где расположена формочка авторизации:
читать дальше
28.04.2010 в 18:13

Пропускай все через сердце
Собственно обработчик входа.
читать дальше

Вот эти джаваскрипты добавяла чисто в экспериментальных целях.
28.04.2010 в 19:40

 
1) По идее, history.back() заставляет браузер вернуться назад и загрузить страницу из кэша. По крайней мере, обычно браузеры ведут себя именно так. Как вариант, можно попробовать поставить ссылку на $_SERVER['HTTP_REFERER'] вместо этого.
2) Сессия-то запускается на страницах с меню?
3) mysql_query("SELECT * FROM users WHERE login='$login'",$db) - тут SQL-инъекция :)
28.04.2010 в 19:55

Пропускай все через сердце
La personne mystique
1. history.back() - это я экспериментировала просто, без него тоже не работало.

if (!empty($_SERVER['HTTP_REFERER']))
header('Location: '.$_SERVER['HTTP_REFERER']);

вот так у меня есть при выходе и закрытии сессии, отлично работает.
я бы и тут поставила, только заголовки отправляются в начале и я не знала, где их правильно поставить, если честно.

2. на всех страницах запускается сессия, а там уже инклудятся блоки меню.
все-то работает, только вот не сразу.
я вернулась назад так или иначе. один раз нажала любую ссылку - я гость. второй раз нажала ссылку - я гость. третий раз нажала ссылку - меня опознали.причем ссылки нужно менять.

3.главное, что работает, мне больше в учебных целях.
но над безопасностью я еще поработаю)
28.04.2010 в 20:15

 
Хм, мистика какая-то. Тоже склоняюсь к неверному кэшированию.
Если у хостера запросы идут через прокси, он может неверно кэшировать (mod_proxy иногда этим отличается).
В качестве предположения, попробуйте сделать вызов session_cache_limiter("nocache") перед стартом сессии (везде, где она запускается).
(Если сработает, то сработает не сразу, а попытки этак с третьей.)
28.04.2010 в 20:32

Пропускай все через сердце
простите за глупый вопрос, а что означает в данном случае неверное кэширование?

скажите, а как правильно вернуться из обработчика?
если я возвращаюсь по ссылке на главную - то все по-прежнему.
А если же я нажимаю на кнопку джаваскрипт, то возвращается на предыдущую страницу, меня все еще не узнают. зато по нажатию первой ссылки - уже все в порядке.
т.е. я думаю, помогло, только неправильное возвращение.
28.04.2010 в 20:55

 
что означает в данном случае неверное кэширование?
Страницы, на которых написана фраза про гостя, кэшируются, и при следующем заходе на них же посетитель видит старую версию вместо новой. После нескольких последовательных запросов кэш сбрасывается, и появляется новая версия.
Ну, по крайней мере, это предположение мне кажется самым разумным.

скажите, а как правильно вернуться из обработчика?
Зависит от того, что вы хотите показать пользователю... Вам совсем правильно или вариант, который будет адекватно выглядеть в учебном проекте начинающего? %)

Например,
<?php
    header
("Location: " . ($_SERVER['HTTP_REFERER'] ? $_SERVER['HTTP_REFERER'] : './index.php'));
?>


Или так:
<p>Вы успешно вошли на сайт как <?php echo $_SESSION['login']; ?></p>
<a href = "index.php"> Главная </a> 
<?php if ($_SERVER['HTTP_REFERER']) { ?><br /><a href="<?php echo $_SERVER['HTTP_REFERER']; ?>">Назад/Go back</a><?php ?>

28.04.2010 в 21:10

Пропускай все через сердце
Страницы, на которых написана фраза про гостя, кэшируются, и при следующем заходе на них же посетитель видит старую версию вместо новой. После нескольких последовательных запросов кэш сбрасывается, и появляется новая версия.
да, я с вами согласна, это самое логичное объяснение.
но все равно странно, что так вышло.

над редиректом еще поработаю, пока что-то не получается. в смысле, чтобы инфа о посетителе обновлялась.
и опять что-то сбилось, потому как опять меня видят как Гостя....
28.04.2010 в 22:08

There I was on a July morning, Looking for love
.masa
Попробуй в своем index.php в самом верху сделать:



Если не поможет и это - стучи в асю/юмыло, будем пробовать разбираться, а потом напишем сюда, в чем было дело.
28.04.2010 в 22:32

Пропускай все через сердце
Я попробовала второй вариант, предложенный La personne mystique.
<a href = "index.php"> Главная </a> 
- этот вариант глючит сильнее.

<?php if ($_SERVER['HTTP_REFERER']) { ?><br /><a href="<?php echo $_SERVER['HTTP_REFERER']; ?>">Назад/Go back</a><?php ?>
- в этом случае при перенаправлении назад меня опознают как гостя, при последующем переходе по ссылке все приходит в нормую

SpiritEagle увы, ваш вариант не помог.
я еще завтра помозгую, если не выйдет, вечером напишу, спасибо большое.

Расширенная форма

Редактировать

Подписаться на новые комментарии
Получать уведомления о новых комментариях на E-mail