Теряется HTTP логин/пароль, без явных причин

DiMA

php.spb.ru
Команда форума
Теряется HTTP логин/пароль, без явных причин

У меня браузер на сайте иногда забивает передавать HTTP логин-пароль. При каких условиях браузер может перестать его передавать? Каталог текущий. Файлы - одни и теже. Понять причину, с чего вдруг браузер не передает логин, не могу - их просто нет.
 

DiMA

php.spb.ru
Команда форума
Какой сниффер? и что им ловить

Я сделал логирование переменных логина/пароля (+сессию, УЛР и т.д.) при каждом вызове любой страницы. Когда происход баг - действительно в моем логе и логе Апача отсутсвует HTTP-логин.

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

si

Administrator
Авторизация запускается из .htaccess или еще как ?
 

DiMA

php.spb.ru
Команда форума
1 загрузка сайта: редирект на http://login:pass@host/
2 загрузка сайта: выдача заголовка HTTP 401, редирект на http://host/
3 и далее: проверяется наличие логин/пароля

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

DiMA

php.spb.ru
Команда форума
Первым шагом я заставляют браузера включить свою авторизацию. Логин пароль выдается программой, пользователь их не знает. Вторым шагом заставляю браузер думать, что необходимо всегда слать пароль.

> Если нет пароля и выдать 401 он пароль не посылает сам ?

Это может привести к появлению стандартного окна с запросом HTTP логин пароля, что недопустимо.
 

HEm

Сетевой бобер
Это с любыим браузером или каким-то конкретным?
 

DiMA

php.spb.ru
Команда форума
IE 6.0.2800.1106 + windowsupdate.com, другие браузеры не интересуют.
 

si

Administrator
Первым шагом я заставляют браузера включить свою авторизацию. Логин пароль выдается программой, пользователь их не знает. Вторым шагом заставляю браузер думать, что необходимо всегда слать пароль.
Редирект идет через html meta или через заголовок Location ?
 

Yurik

/dev/null
Очень странный баг, у меня IE 6.0.2800.1106 сутками висит открытый на phpMyAdmin который запущен через http-авторизацию и ничего не пропадает и после 1000 запросов.

Может все-таки это связано не с броузером а с методом авторизации? Например исчерпывается в ПХП строк сессии, генерится новая, и твой скрипт автоматом генерит новый ключ в login:pass (насколько я понял из #phpclub) т.к. СИД изменился.
Какой сниффер? и что им ловить
не появляется ли в тот момент когда пропадает авторизация заголовок 401
 

DiMA

php.spb.ru
Команда форума
Через форму метода POST. Форму вызывает form.submit(). Могу изменить это на meta refresh.

> не пропадает и после 1000 запросов

И у меня не пропадает, если зажать F5 на клавиатуре и ждать бага.

> Может все-таки это связано не с броузером а с методом авторизации?

Не понял. Да, проблема в авторизации.

> Например исчерпывается в ПХП строк сессии, генерится новая, и твой скрипт автоматом
> генерит новый ключ в loginass (насколько я понял из #phpclub) т.к. СИД изменился.

Вот я сижу, пишу сайт. Переключаюсь в браузер, хожу по сайту (каждые 5 сек клики). На очередной ссылке исчезает логин, это приводит к сбросу авторизации, сессии и т.д. То, что сессия меняется, это уже последствие.

Заголовок 401 посылается только в случае 2-го захода, потом 100% нет. Если послать 401, то хоть окошко ввода пароля всплывет.
 

DiMA

php.spb.ru
Команда форума
Друзья мои, я опечален. Кажется я нашел, в чем дело - закрытие нового окна (окрытого из родительского) приводит к сбросу кук с временем жизни 0 и HTTP логин/пароля...
 

Yurik

/dev/null
закрытие нового окна (окрытого из родительского) приводит к сбросу кук с временем жизни 0
так это ж тоже баг причем я его ни разу не наблюдал. а по закрытию тех окон никакой жабаскрипт не запускается?
и HTTP логин/пароля...
ну не факт, просто твой метод авторизации для новой сессии (куки) требует смены http пароля. Проблема все таки просто в куках, имхо
 

DiMA

php.spb.ru
Команда форума
Не причем тут ни куки, ни сессии. С фичей, что кука 0 исчезает при закрытии окна, я давно знаком и это легко фиксится разными способами. Топик про HTTP авторизацию.
 

fixxxer

К.О.
Партнер клуба
хм...а при каких условиях это происходит?
у меня не получилось смоделировать.
 

Alien

Новичок
Смены домена не происходит?
Авторизовался скажем www.domain.ru => по ссылке/location ... отправили на domain.ru где то дальше?

Пока больше ничего не придумывается...
 

DiMA

php.spb.ru
Команда форума
Нет, домен не менятся. Я пробовал все редиректы править на абсолютные, с учером порта, не помогает.

Я нашел точные условия потери и HTTP ключа и кук с жизнью 0. Только не надо про сессии писать - номер сессии я задаю просто фиксированным номером в проге, чтобы исключить баги.

Есть первичное окно - при запуске браузера. В нем через редирект происходит установка авторизации.

1. Если ходить по сайту в первичном окне, не создавая новых окон, то авторизация не теряется и куки живут.

2. Если открыть любое новое окно (по ссылке+Shift или по Ctrl+N себя) и закрыть, затем перейти по ссылке в первичном или повторно открыть новое окно (по ссылке+Shift или по Ctrl+N себя) - тереятся и авторизация, и куки времени 0.

3. Можно открывать с помошью Shift+клик по ссылке или по Ctrl+N туже страницу или любую с сайта. Можно открывать кучу новых окон. Можно закрывать все созданные новые окна, кроме одного так, чтобы оставалось первое и любое из новых. Т.е. можно открыть из первичного окна сначала окно2, потом окно3, затем закрыть окно2, открыть окно4, закрыть окно3 и т.д. Пока остается хотя бы одно новое (первичное не трогаю) - авторизация остается. Можно ходить и в первичном окне. Но как только будут закрыты все новые окна и будет в первичном окне клик по ссылке (возможно, с Shift) или новое окно Ctrl+N - авторизация и куки теряются.

4. Если открыть из первичного новое окно, затем закрыть первичное, то любые следующие извращения не приведут к потери авторизации. Можно что угожно открыть и закрывать...

Я создал тестовый пример, который тоже устанавливает авторизацию и куку 0. В нем можно делать чего угодно - авторизация и куки не теряются до закрытия всех окон браузера, в этом примере воспроизвести баг не могу. В реальной проге пробовал устанавливать пароль авторизации как GET/POST форма, META refresh - баг не пропадает. Еще после установки пароля пробовал редиректить браузер на URL без пароля (чтобы в ссылках, в статусной строке браузера, не светился логин:пароль) и с паролем - не помогает. Все ссылки прописал как URL с логин:паролем - не помогает.
 
Сверху