Сайт использует механизм авторизации. Пользователь в веб-форму вводит пароль и логин, которые сравниваются с содержащимися в базе данных. В случае совпадения с одним из пользователей, выставляется сессионная переменная userID, которая равна примерно следующему 'wuerkldbfaliufhowreyqpoe123' (это значение хранится в базе данных).
Далее на всех страницах происходит выборка из БД по вышеуказанному userID пользвателя. Если нет такого - тогда Access Denied. В противном случае - OK.
Проблема в следующем. Иногда (примерно 1 из 20 случаев) userID не передается далее первой административной страницы (на которую пользователь попадает после ввода в форме авторизации пароля и логина). Создается ощущение, что сессионная переменная, которая, по всей видимости, должна передаваться с помощью механизма сессий всем остальным страницам - не передается и при попадании на следующие страницы мы получаем Access Denied.
Реализовано следующим образом (на псевдоязыке):
Модуль auth.php
1. session_start();
2. извлекаем id у которого login=EnteredLogin и pass=EnteredPass
3. если такого нет - Invalid Login or Pass, exit
4. userID = id
5. session_register('userID');
6. редирект на admin.php
Модуль admin.php
1. session_start();
2. извлекаем из БД позиции с id=userID
3. если в базе нет такого id, то Access Denied, exit.
….
Модуль admin.php содержим несколько подразделов (в зависимости от передаваемого параметра admin.php?topic=xxx)
Резюме: иногда дальше второй страницы модуля admin.php не "пускает". Говорит Access Denied. Исследования показали, что там содержимое userID == ''.
У кого-нибудь была похожая ситуация и с чем проблема может быть связана ?
Заранее спасибо.
|