Forum Webscript.Ru

Программирование => PHP => Тема начата: CGVictor от 17 Апреля 2004, 14:17:59

Название: HTTP401 logoff
Отправлено: CGVictor от 17 Апреля 2004, 14:17:59
Пишу авторизацию. Сессии.
Получение входных данных - $PHP_AUTH_USER и PW. То есть "HTTP 401 Unauthorized"

Со входом все в полном порядке.
Устанавливаю в переменной сессии флаг авторизованности.
А вот как реализовать выход?

Проблема вот в чем:

- если сбрасывать флаг авторизованности - то при дальнейшей работе юзера остается открытая сессия и тянется PHPSESSID. Что некрасиво и неправильно.

- а если уничтожать сессию, то при обращении к скрипту авторизации браузер снова передает $PHP_AUTH_USER и PW. То есть выйти получается невозможно - тут же происходит новая авторизация. Бродилка, похоже, ориентируется по "HTTP 401" и снова передает логин и пасс.
Как запретить ей (бродилке, браузеру) это делать?

[off]Использовать отдельную страничку с формой ввода - не пойдет. Заказчик "окошко с паролем" хочет..[/off]
Название: HTTP401 logoff
Отправлено: FreeSpace от 17 Апреля 2004, 16:06:28
Цитировать
Мануал (http://www.php.net/manual/en/features.http-auth.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.
Название: HTTP401 logoff
Отправлено: Меняздесьдавнонет от 19 Апреля 2004, 00:53:23
Цитировать
Пишу авторизацию. Сессии.
Получение входных данных - $PHP_AUTH_USER и PW

глупость.
обоснуй.
Цитировать
если сбрасывать флаг авторизованности - то при дальнейшей работе юзера остается открытая сессия

Это еще с какой радости?!
Кто тебя заставляет сессию стартовать?
Цитировать

Как запретить ей (бродилке, браузеру) это делать?

никак, расслабься.
Цитировать
Использовать отдельную страничку с формой ввода - не пойдет. Заказчик "окошко с паролем" хочет..

выводи яваскриптом.
Название: HTTP401 logoff
Отправлено: FreeSpace от 19 Апреля 2004, 01:56:31
[OFF]RomikChef
Меня оклеветали! :D[/OFF]
Название: HTTP401 logoff
Отправлено: CGVictor от 19 Апреля 2004, 12:05:10
Цитировать
FreeSpace:
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.

Бред. Говорю же, не работает.
Цитировать
RomikChef:
глупость.обоснуй.

В чем именно - в сессиях или PHP_AUTH_USER?
Цитировать
RomikChef:
Кто тебя заставляет сессию стартовать?

Мне показалось, так проще. Как нужно делать?
Цитировать
RomikChef:
выводи яваскриптом

:) Придется...
Название: HTTP401 logoff
Отправлено: Меняздесьдавнонет от 19 Апреля 2004, 12:16:52
Цитировать
CGVictor:
В чем именно - в сессиях или PHP_AUTH_USER?

в соединении этих двух механизмов.

Цитировать
CGVictor:
Мне показалось, так проще. Как нужно делать?

как-как?
стартовать сессию, если нужна, и не стартовать - если не нужна
Название: HTTP401 logoff
Отправлено: CGVictor от 19 Апреля 2004, 13:39:15
Цитировать
RomikChef:
в соединении этих двух механизмов.

А что в этом особо паршивого? В Http_Auth_Basic пароли летят практически прямым текстом. Чтобы не передавать их при каждом обращении, лучше, мне кажется, пользоваться сессиями...
Цитировать
RomikChef:
стартовать сессию, если нужна, и не стартовать - если не нужна

Нет, с этим как раз все ясно. Если авторизация проходит нормально, то сессия нужна (пользователь же дальше по админзоне гуляет). Но потом-то он в любом случае из нее выйдет. Поэтому сессия нужна, т.к. выйти из админзоны можно только если предварительно в нее войти :)
Название: HTTP401 logoff
Отправлено: Меняздесьдавнонет от 19 Апреля 2004, 14:01:01
Цитировать
CGVictor:
 Http_Auth_Basic пароли летят практически прямым текстом. Чтобы не передавать их при каждом обращении

ХА ХА ХА
Тупить-то не надо.
Ты сам-то понял, что сказал?
Ты можешь привести причину, по которой браузер НЕ будет посылать пароли с каждым запросом? Потому, что они тебе не нужны? Ты ему на ушко шепнешь, да?

И даже несмотря на это смехотворное заблуждение, в ответе все равно нет никакой логики. При чем здесь вообще пароли?
Бред - использовать НТТР только для вывода окошка
Название: HTTP401 logoff
Отправлено: Меняздесьдавнонет от 19 Апреля 2004, 14:04:29
Цитировать
CGVictor:
Поэтому сессия нужна, т.к. выйти из админзоны можно только если предварительно в нее войти

Мальчик, ты тормоз?
что мне за дело до твоих зон?
То тебе не нравится, что у тебя там что-то тянется, тебе задают законный вопрос - а зачем ты сам тянешь, и в ответ начинаются рассказы про какие-то зоны. эрогенные.
Название: HTTP401 logoff
Отправлено: CGVictor от 19 Апреля 2004, 14:08:02
Цитировать
RomikChef:
Тупить-то не надо.

Ценное замечание.
Цитировать
RomikChef:
Ты можешь привести причину, по которой браузер НЕ будет посылать пароли с каждым запросом?

Потому что я от него их не прошу. После того, как я получил PHP_AUTH_USER, мне логин/пароль, в принципе, не нужны. Ибо есть сессия, где написано, что юзер авторизован. И с какой радости браузеру мне их слать? Он их и не шлет - проверял.

А как ему обьяснить, что не надо слать пароли автоматически на повторное появление "HTTP 401"?

[off]
Цитировать
RomikChef:
При чем здесь вообще пароли?

И кто тупит после этого?[/off]
Название: HTTP401 logoff
Отправлено: ThE0ReTiC от 19 Апреля 2004, 14:12:50
Цитировать
CGVictor:
А как ему обьяснить, что не надо слать пароли автоматически на повторное появление "HTTP 401"?

ну так не допускай повторного появления 401.
Или это выше твоего понимания?
Название: HTTP401 logoff
Отправлено: Меняздесьдавнонет от 19 Апреля 2004, 16:07:44
Мальчик просто не понимает, как работает НТТР авто.
И еще ерепенится.

когда узнает (а он же у нас круче вареных яиц), тогда и просветление ему будет.
А тема закрывается в силу полной своей бессмысленности.
Название: HTTP401 logoff
Отправлено: Меняздесьдавнонет от 19 Апреля 2004, 16:09:54
Цитировать
CGVictor:
Он их и не шлет - проверял.

не забудь проверить еще раз, чудик
Название: HTTP401 logoff
Отправлено: Меняздесьдавнонет от 19 Апреля 2004, 16:26:57
Цитировать
CGVictor:
а если уничтожать сессию, то при обращении к скрипту авторизации браузер снова передает $PHP_AUTH_USER и PW.

Хе хе.
Вот этот забавный момент за всеми ляпами остался мной незамечаенным.
То есть, чувачок прилепил свой код в виде заплатки к некоей готовой НТТР авторизации.
И пихает из сессии в серверные переменные логин и пароль, как будто они пришли при авторизации.
Больше ничем эту цитату объяснить нельзя.
Разве что, некими телепатическими способностями браузера, который самостоятельно узнаёт, когда нашему другу нужен пароль
Не, я, все-таки, сейчас с него уписаюсь :-)
Название: HTTP401 logoff
Отправлено: CGVictor от 21 Апреля 2004, 12:14:46
Цитировать
RomikChef:
Не, я, все-таки, сейчас с него уписаюсь :-)

Ромик, я все-таки закрываю глаза на весь тот флейм, который ты тут устроил.
Цитировать
RomikChef:
не забудь проверить еще раз, чудик

Да запросто. Результат - тот же.
Цитировать
RomikChef:
И пихает из сессии в серверные переменные логин и пароль, как будто они пришли при авторизации.

Ерунду говорить не надо.

Короче, ладно. Если ничего толкового сказать не можешь -
Цитировать
RomikChef:тема закрывается

А мне, похоже, придется делать отдельную страничку с формой.
Название: HTTP401 logoff
Отправлено: Меняздесьдавнонет от 21 Апреля 2004, 16:36:10
Цитировать
CGVictor:
Ерунду говорить не надо.

нет уж, давай разбернемся, родной :-)
Итак, как ты объясняешь вот эту свою фразу:
Цитировать
CGVictor:
а если уничтожать сессию, то при обращении к скрипту авторизации браузер снова передает $PHP_AUTH_USER и PW.

Какая связь между сессией и нттр авторизацией?
С какой это радости браузер сразу кидается передавать $PHP_AUTH_USER после того, как ты уничтожаешь сессию?
Как ты объясняешь данное поведение браузера.
Окей, я сказал ерунду.
Жду твоего пояснения.

Цитировать
CGVictor:
А мне, похоже, придется делать отдельную страничку с формой.

Это не вопрос.
Но, как ты мог бы заметить, еня не устраивает, когда клиент уходит с готовым ответом, но с тем же отсутствием знаний в голове, с которым и пришел.
Так что давай разбираться.
На будущее пригодится.
Название: HTTP401 logoff
Отправлено: CGVictor от 22 Апреля 2004, 10:20:33
Цитировать
RomikChef:
Так что давай разбираться.
На будущее пригодится.

Абсолютно согласен.

Итак:

Цитировать
RomikChef:
С какой это радости браузер сразу кидается передавать $PHP_AUTH_USER после того, как ты уничтожаешь сессию?

Когда я уничтожаю сессию (с флагом авторизации), то мой код вполне справедливо считает пользователя неавторизованным. Потому что так оно и есть.

Когда к моему скрипту обращается пользователь, для которого нет открытой сессии - скрипт выдает "401", неавторизован.

И вот здесь - ключевой момент. Допустим, пользователь зашел один раз. Ввел входные данные. Вышел. Сессия для него уничтожается, пользователь (для простоты работы) перекидывается на главную страницу сайта и т.д.

При повторном обращении к скрипту с авторизацией скрипт выдает браузеру "401", чтобы пользователь указал входные данные снова.
А браузер, ориентируясь что "здесь уже была авторизация", снова передает скрипту те данные, которые он(пользователь) вводил в первый раз. Причем у пользователя ничего не спрашивает.

Вот. А мне нужно, чтобы при повторном обращении браузер снова запросил логин-пасс (т.к. пользователь может быть другой!).
Название: HTTP401 logoff
Отправлено: ThE0ReTiC от 22 Апреля 2004, 10:47:06
гуглуем.
Вторая ссылка на $PHP_AUTH_USER
http://ru.php.net/session_destroy
комментарий 3.
Оно?
Название: HTTP401 logoff
Отправлено: CGVictor от 22 Апреля 2004, 11:18:31
Цитировать
ThE0ReTiC:
http://ru.php.net/session_destroy комментарий 3.
Оно?

Не оно. У меня немножко по другому, да и не в этом суть.
Проблема все равно остается.

[off]* Начинаю думать: а может, это проблема браузера? Слишком всё неправильно получается[/off]
Название: HTTP401 logoff
Отправлено: FreeSpace от 22 Апреля 2004, 19:33:23
CGVictor
Это проблема не браузера, а твоего непонимания механизма работы Basic-аутентификации.
Ты должен чётко понять, что механизм аутентификации и сессии - это два абсолютно разных понятия. Они между собой никак не связаны и работают независимо друго от друга.
Если ты поймешь это, то для тебя станет очевидным, что проблема у тебя не с сессиями, а именно с аутентификацией.
Мануал (а наверняка и спецификация HTTP, но я не проверял) говорит, что однажды получив от пользователя верную связку username / password, браузер запоминает её, а затем передает в каждом следующем запросе к этому же серверу (на самом деле, если не ошибаюсь, там есть заморочки с реалмами, но я не хочу ещё больше усложнять проблему). Тебе же нужно сделать так, чтобы при логауте и уничтожении сессии, так же сбрасывалось имя пользователя и пароль, которые используются для HTTP-авторизации и хранятся в памяти браузера.
Так вот, вся проблема в том, что на PHP это реализовать нельзя.
Я тебе уже приводил цитату из мануала, как можно попытаться это реализовать. Если этот способ не сработал, то никаких других вариантов не отсается. Браузер будет хранить имя пользователя и пароль у себя до тех пор, пока ты его не перезапустишь. Во многих браузерах, например в Мозилле, есть опция Log Out, которая очищает имя пользователя и пароль без перезапуска браузера. Но выбрать эту опцию может только пользователь, PHP тут не при делах.

Лично моё мнение, многие могут не согласится, но всё же:
Я вообще не вижу смысла использовать Basic-аутентификацию в PHP.
Если тебе нравится стандартное браузеровское окошко - используй .htaccess/.htpasswd. Если ты хочешь сам нарисовать страницу ввода пароля и обеспечить нормальную возможность выхода пользователей, используй авторизацию на куках/сессии.
Название: HTTP401 logoff
Отправлено: CGVictor от 24 Апреля 2004, 18:23:17
FreeSpace
Цитировать
FreeSpace:
Ты должен чётко понять, что механизм аутентификации и сессии - это два абсолютно разных понятия. Они между собой никак не связаны и работают независимо друго от друга. Если ты поймешь это, то для тебя станет очевидным, что проблема у тебя не с сессиями, а именно с аутентификацией.

Это я уже понял. И понял еще до начала поста.
Цитировать
FreeSpace:
Если этот способ не сработал, то никаких других вариантов не отсается

Спасибо. Тоже понял.
Цитировать
FreeSpace:
Если тебе нравится стандартное браузеровское окошко - используй .htaccess/.htpasswd. Если ты хочешь сам нарисовать страницу ввода пароля и обеспечить нормальную возможность выхода пользователей, используй авторизацию на куках/сессии.

Идея не моя, просто так люди хотят. Придется их обломать.

Всем спасибо.