Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> аутентификация, кеширование страницы 
:(
    Опции темы
Zzet
Дата 14.12.2009, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 180
Регистрация: 28.6.2009

Репутация: нет
Всего: нет



здравствуйте! есть механизм аутентификации пользователя для внутр сети. при правильной аутентификации создается сессия, которая живет до нажатия пользователем кнопки выйти. после этого хоть нажатие на кнопку в браузере обновить, хоть переход на предыдущую страницу - выкидывает на пустую страницу. но если вход был правильный потом выход правильный при новом запуске приложения вход на страницу пользователя происходит автоматически, без ввода пароля и логина. это ошибка. подумал что проблема в кешировании страницы, попытался устранить глюк следуя шагам, указанным на сайтах http://webo.in/articles/all/http-caching/
http://www.codenet.ru/webmast/php/caching.php#cache
http://xpoint.ru/forums/programming/server...read/4908.xhtml
но, к сожалению воз и ныне там. что с этим делать?

Добавлено через 3 минуты и 18 секунд
да, механизм аутентификации, создан без помощи нтмл-тегов, он получает ответы о правильности непосредственно от браузера и сервера и через бд мускл. т.е. в коде аутентификации есть прописаны только вызовы заголовков 
Код

 header('WWW-Authenticate: Basic realm="rrrrrrrrrrrrrrrr"');
        header('HTTP/1.0 401 Unauthorized'); 

PM MAIL   Вверх
capitan
Дата 14.12.2009, 16:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 602
Регистрация: 27.2.2005
Где: Москва

Репутация: 1
Всего: 13



Цитата(Zzet @ 14.12.2009,  15:09)
при правильной аутентификации создается сессия, которая живет до нажатия пользователем кнопки выйти.... если вход был правильный потом выход правильный

Как создается сессия? Что значит выход правильный? Как он происходит?
PM MAIL WWW ICQ   Вверх
Ипатьев
Дата 14.12.2009, 16:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: 0
Всего: 37



Казалось бы, при чем здесшь кэширование...
PM MAIL   Вверх
Zzet
Дата 14.12.2009, 17:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 180
Регистрация: 28.6.2009

Репутация: нет
Всего: нет



аутентификация верна если логин и пароль верный - здесь загружается рабочая область пользователя и сессия равна его ид, при завершении работы пользователь должен нажать ссылку выйти(здесь происходит session_destroy();). и вот тут возникает проблема - пользователь закрывает браузер, идет занимается своими делами, снова открывает браузер, прописывает адрес в строке запроса браузера и здесь снова должна произойти аутентификация- ан нет!, пользователь снова попадает на свою рабочую область. а если второй раз с его рабочего места зайдет другой пользователь и наделает неприятностей?
2Ипатьевпри чем здесшь кэширование? может и не в кешировании дело? тогда в чем?
PM MAIL   Вверх
Ипатьев
Дата 14.12.2009, 17:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: 0
Всего: 37



Цитата

здесь происходит session_destroy()

зачем?

PM MAIL   Вверх
Zzet
Дата 14.12.2009, 19:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 180
Регистрация: 28.6.2009

Репутация: нет
Всего: нет



и     unset($PHP_AUTH_PW);
        unset($PHP_AUTH_USER); и session_destroy() не проходят
зачем? - чтоб пользователь аутентифицировался заново.
PM MAIL   Вверх
Ипатьев
Дата 14.12.2009, 19:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: 0
Всего: 37



Eсли вы не заметили, то после session_destroy() пользователю НЕ приходится аутентифицировался заново

в общем, если вы не понимаете, что делаете, то лучше сделать "с помощью нтмл-тегов"
PM MAIL   Вверх
Zzet
Дата 14.12.2009, 20:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 180
Регистрация: 28.6.2009

Репутация: нет
Всего: нет



Ипатьев я понимаю что делаю, иначе бы не спрашивал. спрашивая надеялся на совет, через теги делать не могу(требование в тз smile )
PM MAIL   Вверх
Ипатьев
Дата 14.12.2009, 20:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: 0
Всего: 37



Цитата(Zzet @  14.12.2009,  20:04 Найти цитируемый пост)
 я понимаю что делаю

о, да. unset($PHP_AUTH_PW); говорит об этом очень красноречиво

Не могли бы вы скопировать сюда место в ТЗ, в котором написано про то, что надо сделать "без помощи нтмл-тегов"?
Возможно, имеет место какое-то недоразумение.


PM MAIL   Вверх
Zzet
Дата 14.12.2009, 20:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 180
Регистрация: 28.6.2009

Репутация: нет
Всего: нет



у меня инструкция распечатанная с принтскринами подобного приложения заказчик хочет так же.то есть в експлорере это окошко с ключиками, в виндовс 7 с цветочком красным и т.д - эти окно стандартные при вызове заголовков. unset($PHP_AUTH_PW); пробую хоть что-то.
PM MAIL   Вверх
Ипатьев
Дата 14.12.2009, 21:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: 0
Всего: 37



да  не против. пробуйте.
только не говорите тогда, что что понимаете.  выберите что-то одно.

PM MAIL   Вверх
Zzet
Дата 14.12.2009, 21:43 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 180
Регистрация: 28.6.2009

Репутация: нет
Всего: нет



Ипатьев я пришел за помощью, а не одобрением. если есть что сказать по делу - говорите!

Добавлено через 42 секунды
и каждый суслик в поле агроном
PM MAIL   Вверх
Ипатьев
Дата 14.12.2009, 21:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: 0
Всего: 37



Я написал. Два раза. Я то-то не заметил повышенного интереса к техническим вопросам. 
Вас больше интересовало объяснить всем, как много вы понимаете.
PM MAIL   Вверх
Zzet
Дата 14.12.2009, 21:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 180
Регистрация: 28.6.2009

Репутация: нет
Всего: нет



вовсе нет. технический вопрос - как же тогда убить сессию в данном случае(если session_destroy() и unset($PHP_AUTH_PW))? что писать вместо PHP_AUTH_PW? уже пробовал $_SERVER['PHP_AUTH_USER']  и $_SERVER['PHP_AUTH_PW'] - все без изменений?

Добавлено через 1 минуту и 38 секунд
если Вы(Ипатьев) считаете что проблема в том что я чего-то не знаю, будьте добры, скажите конкретно в чем беда?

Добавлено через 1 минуту и 59 секунд
и что нужно знать
PM MAIL   Вверх
Ипатьев
Дата 14.12.2009, 23:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: 0
Всего: 37



Знать нужно очень много. протокол НТТР в целом и механизм (несложный) НТТР авторизации в частности. Чтобы хотя бы не возникало желания делать unset(PHP_AUTH_*)

Технический вопрос - зачем убивать сессию. И вообще, и - особенно - в данном конкретном случае. Это раз.

Техническая ремарка: Если пользователь ставит галочку "запомнить пароль" в этом окошке, то он входит точно так же, несмотря вообще ни на какие наши желания.
Техническая рекомендация вам придется очень попотеть, чтобы сделать этого франкенштейна из сессий и НТТР авторизации. Поэтому я настоятельно рекомендую сделать по-человечески, на одних сессиях. Иначе может совсем не получиться. Только если придет Питлорд и все распишет smile



PM MAIL   Вверх
Zzet
Дата 15.12.2009, 00:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 180
Регистрация: 28.6.2009

Репутация: нет
Всего: нет



Ипатьев - сделать по-человечески, на одних сессиях, значит без заголовков? буду думать, спасибо
PM MAIL   Вверх
Ипатьев
Дата 15.12.2009, 00:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: 0
Всего: 37



думать тут нечего. 
так никто не делает. 
делают или на сессиях, или на заголовках. причем в последнем случае будут проблемы с повторным заходом все равно.
собственно и здесь проблема была именно в этом. сессию убили, но браузеру-то вы не сказали, что сеанс окончен, все свободны. 
PM MAIL   Вверх
sTa1kEr
Дата 17.12.2009, 16:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 11
Всего: 146



HTTP authentication with PHP
Цитата

Both Netscape Navigator and Internet Explorer will clear the local browser window's authentication cache for the realm upon receiving a server response of 401. This can effectively "log out" a user, forcing them to re-enter their username and password. Some people use this to "time out" logins, or provide a "log-out" button. 

Код

<?php
function authenticate() {
    header('WWW-Authenticate: Basic realm="Test Authentication System"');
    header('HTTP/1.0 401 Unauthorized');
    echo "You must enter a valid login ID and password to access this resource\n";
    exit;
}
 
if (!isset($_SERVER['PHP_AUTH_USER']) ||
    ($_POST['SeenBefore'] == 1 && $_POST['OldAuth'] == $_SERVER['PHP_AUTH_USER'])) {
    authenticate();
} else {
    echo "<p>Welcome: {$_SERVER['PHP_AUTH_USER']}<br />";
    echo "Old: {$_REQUEST['OldAuth']}";
    echo "<form action='{$_SERVER['PHP_SELF']}' METHOD='post'>\n";
    echo "<input type='hidden' name='SeenBefore' value='1' />\n";
    echo "<input type='hidden' name='OldAuth' value='{$_SERVER['PHP_AUTH_USER']}' />\n";
    echo "<input type='submit' value='Re Authenticate' />\n";
    echo "</form></p>\n";
}
?>

PM MAIL   Вверх
Ипатьев
Дата 17.12.2009, 16:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: 0
Всего: 37



sTa1kEr, осталось узнать, в какой момент этот волшебный код запускать ;-)
PM MAIL   Вверх
sTa1kEr
Дата 17.12.2009, 17:03 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 11
Всего: 146



Цитата(Ипатьев @  17.12.2009,  17:36 Найти цитируемый пост)
sTa1kEr, осталось узнать, в какой момент этот волшебный код запускать ;-) 

Этот код не надо запускать. Потому что этот код - всего-лишь наглядный пример, демонстрирующий как
Цитата(sTa1kEr @  17.12.2009,  17:28 Найти цитируемый пост)
use this to "time out" logins, or provide a "log-out" button


Это сообщение отредактировал(а) sTa1kEr - 17.12.2009, 17:09
PM MAIL   Вверх
Ипатьев
Дата 17.12.2009, 17:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: 0
Всего: 37



проблема в том, что в данном конкретном случае этот код не поможет.
поскольку авторизация делается сессиями.
PM MAIL   Вверх
sTa1kEr
Дата 17.12.2009, 17:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 11
Всего: 146



Цитата(Ипатьев @  17.12.2009,  18:12 Найти цитируемый пост)
проблема в том, что в данном конкретном случае этот код не поможет.
поскольку авторизация делается сессиями. 

Отнюдь. Это своего рода решение как сделать "unset($PHP_AUTH_PW)", которое так искал автор. Т.е. для logout'а ему достаточно выдать ответ 401, или сделать редирект на страницу с авторизацией.
PM MAIL   Вверх
Ипатьев
Дата 17.12.2009, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: 0
Всего: 37



ну вот об этом и речь.
я же и пишу - весь вопрос в том, когда этот волшебный код запускать.
не в момент логаута же
PM MAIL   Вверх
sTa1kEr
Дата 17.12.2009, 17:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 11
Всего: 146



Цитата(Ипатьев @  17.12.2009,  18:27 Найти цитируемый пост)
не в момент логаута же 

Цитата(sTa1kEr @  17.12.2009,  18:23 Найти цитируемый пост)
Т.е. для logout'а ему достаточно выдать ответ 401, или сделать редирект на страницу с авторизацией. 


PM MAIL   Вверх
Ипатьев
Дата 17.12.2009, 17:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: 0
Всего: 37



тогда у юзера вылезет окно авторизации, и юзер не будет знать, что с ним делать
это не совсем похоже на логаут, как мне кажется smile
PM MAIL   Вверх
sTa1kEr
Дата 17.12.2009, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 11
Всего: 146



Цитата(Ипатьев @  17.12.2009,  18:31 Найти цитируемый пост)
тогда у юзера вылезет окно авторизации, и юзер не будет знать, что с ним делать
это не совсем похоже на логаут, как мне кажется smile 

Почему-же? Он сделал logout, стал не авторизованным пользователем и по этому ему предлагают авторизоваться вновь. Так часто делают и в классическом механизме, редиректят на форму с авторизацией. И потом кнопка "Cancel" там не спроста.

Это сообщение отредактировал(а) sTa1kEr - 17.12.2009, 17:42
PM MAIL   Вверх
Ипатьев
Дата 17.12.2009, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: 0
Всего: 37



одно дело - страница сайта с формой авторизации. и ссылками в с любой раздел сайта
совсем другое - мерзкое модальное окно, которое пока не закроешь, никуда не попадешь
и выдавать его надо только для ввода пароля, разумеется. для чего состояние - онлайн или оффлайн - придется писать в базу.
PM MAIL   Вверх
sTa1kEr
Дата 17.12.2009, 17:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 11
Всего: 146



Цитата(Ипатьев @  17.12.2009,  18:45 Найти цитируемый пост)
совсем другое - мерзкое модальное окно, которое пока не закроешь, никуда не попадешь

Ну мерзкое оно или нет решать ТС, раз уж он решил использовать этот способ smile 

Цитата(Ипатьев @  17.12.2009,  18:45 Найти цитируемый пост)
которое пока не закроешь, никуда не попадешь

В общем да, именно для этого авторизация посредством HTTP протокола и нужна. Что бы либо разрешить доступ ко всему ресрсу, либо не разрешить. А уж устраивает это ТС или нет мы можем узнать от него самого.

Добавлено через 1 минуту и 50 секунд
Т.е. тут весь вопрос в юзабилити, если ТС устраивает такое поведение сайта, то флаг ему в руки.
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса

Внимание: данный раздел предназначен для решения сложных, нестандартных задач.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Для профи | Следующая тема »


 




[ Время генерации скрипта: 0.1118 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.