Проблемы с сессиями

Mishin Oleg

Новичок
Проблемы с сессиями

Обьясню проблему.
Есть движок. Адресация логическая, тобеж http://host/part/dir/subdir/par1/par2/ и так далее, и все это естессно работает через http://host/index.php, для чего в .htaccess прописано:

ErrorDocument 404 /index.php

при этом админка для сайта лежит http://host/admin/, и там все также, и в .htaccess прописано

ErrorDocument 404 /admin/index.php

Весь сайт работает на сессиях, при чем даже гость получает сессию, в которой регистрируются $_SESSION['login'] и $_SESSION['password'] равные guest.

То же самое при входе в админку - ты логинишься, и пошло-поехало...

PHP:
session_start();

if(IsSet($_POST['action']))if($_POST['action']=='login')if( (IsSet($_POST['login'])) &&(IsSet($_POST['password'])) )
    {
    $_SESSION['login']=$_POST['login'];
    $_SESSION['password']=$_POST['password'];
    }

if(!IsSet($_SESSION['login'])) $_SESSION['login']='guest';
if(!IsSet($_SESSION['password'])) $_SESSION['password']='guest';
с этого начинается index.php. Но вот проблема: захожу - логин и пароль нормально распознаются, проверяются, записываются в сессию.

Но при повторном обращении к index.php $_SESSION['login'] и пароль не определены - все данные сессии пропадают. В чем может быть проблема?
 

440hz

php.ru
Mishin Oleg
1. хранить логин и пароль в сессии? может лучше хранить ID юзера?
2. время жизни сессии какое? есть сессии которые живут пока ты не закроешь броузер. 8)
3. посмотри ручками что и как лежит. куки в броузере и сессиия на сервере (если есть возможность.)
4. повторное обращение это по F5? или как?
 

Mishin Oleg

Новичок
1) храню пароль и логин, так как проверка происходит при каждом запросе страницы. От хранения ID отказался, в свое время показалось очень ненадежно. Может зря, но зато надежность на высоте.
2) сессия до закрытия браузера, хотя это только в данном случае, а вообще настраиваемый параметр в админе.
3) все на местах, вроде, но... читай дальше.
4) повторное по любой линке, которая обрабатывается .htaccess.

Вот я и подумал, может проблема в htaccess - почему я так решил:
если я убираю сам сайт, и оставляю только админку, то есть файла http://host/index.php не существует - обработка происходит нормально, и сессия сохраняется. Такое ощущение, что изначально обрабатывается не http://host/admin/.htaccess а http://host/.htaccess, который изначально вызывает http://host/index.php, в котором происходит инициализация своей сессии (как обычного посетителя сайта), а потом происходит запуск http://host/admin/index.php, который уже ничего естессно не получает - может быть такое, если .htaccess

ErrorDocument 404 /index.php
php_value include_path "scripts/;modules/"

и

ErrorDocument 404 /admin/index.php
php_value include_path "scripts/;modules/"

соответствено - никаких других строк в них нет, но почему тогда сначала вызывается коренной .htaccess?
 

kruglov

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

Может, в каком-то скрипте вы не делаете session_start?

p. s. Попробуйте таки наконец забыть про ErrorDocument как про страшный сон, а реализовать это через mod_rewrite. Заодно избавитесь от проблем с $_POST.
 

Mishin Oleg

Новичок
Про надежность: а иначе как я понимаю, схема такая: пользователь логинится, ему присваивается Session_ID, и в базу записывается, что этот юзер заходящий по этой сессии получает определенный доступ, но тогда продлема: если необходимо залогинить несколько пользователей под одним логином - получается надо хранить все ID, которые устаревают к примеру раз в 2 суток, я ничего не забыл?

С сессией проблему удаолось локализовать и обойти, но решение вкорее временное - мне все равно интересно почему - скорее всего я неправильно настроил .htaccess. Проблема была в том, что при запросе некоего URL в админе сначала обрабатывался коренной http://host/index.php, причем его output нигде не выводился. Вслед за ним обрабатывался http://host/admin/index.php - который уже выводился, но чьи данные сессии терялись, так как в первом Index.php совершенно другая база пользователей (не база админов а база посетителей) и тогда данные об админской сессии обнулялись.

Мои .htaccess (исправленный по твоему совету):

Коренной
php_value include_path "scripts/;modules/"
RewriteEngine On
RewriteRule index.php - [L]
RewriteCond $1 !^admin
RewriteRule (.*) /index.php [L]

админский
php_value include_path "scripts/;modules/"
RewriteEngine On
RewriteRule index.php - [L]
RewriteCond $1 !^admin
RewriteRule (.*) /admin/index.php [L]

в чем ошибка? почему обрабатывается сначала центральный индекс, а лишь потом нужный?
 
Сверху