опрос по сессиям

Статус
В этой теме нельзя размещать новые ответы.

sultan347

Участник
Регистрация
25 Апр 2009
Сообщения
230
Реакции
7
1. почему session_start(); переменных $_SESSION как бы обнуляет, вроде даже не уничтожает, а просто в null переводит
2. как сделать, чтобы session_id() был и у авторизованных, и у "гостей".
3. Что бы 2 пункт выполнился, достаточно написать в начале session_start();, но это обнуляет $_SESSION данные у авторизованного, что не приемлемо
4. Сессия () должна жить независимо от установок php.ini, у гостей от запуска сайта до закрытия браузера, а у авторизованного 1 месяц, если не нажал "выход", в этом случае его сессия уничтожается.
5. Наверняка для 4 пунта нужна функция для session_start();, что бы задать время жизни, что то типа:
 
Вызывай session_start только один раз в начале скрипта ДО любого вывода,
а далее выполняй нужные тебе манипуляции с сессиями.. например, юзер входит на сайт, ты в скрипте проверяешь нет ли для него нужной сессии, если нет проверяем может есть у него ранее сохраненная кука для авторизации, если есть кука разбираем ее(в ней может содержаться логин и хеш пароля) и авторизуем юзера. Если ни того ни другого нет, то пользователь гость, но он, например, уже зарегистрирован на сайте и решил войти, водит логин пароль, мы в скрипте получаем все это сверяем с тем что в базе, если сходится устанавливаем сессию(OK) и куку с данными авторизации на 1 месяц, ее в нужный момент можно удалять.
Сессия в любом случае будет, а вот нужная инфа для доступа будет только у авторизованного пользователя.
 
Не обязательно надо стартовать сессию в начале скрипта ,можно в любой его части, перед тем, как потребуется работать с сессией ,только правильно замечено, до любого вывода и только один раз .
 
На самом деле, если значения в $_SESSION есть, значит сессия уже запущена...
при повторном запуске происходит обнуление... чтобы этого избежать используй:
if(session_id() == "")
{
session_set_cookie_params( 0, '/' );
session_start();
}

но месяц сессии не хранятся, для этого используется дополнительная кука (для функции "запомнить меня"), туда кладется уникальный ключь, который надо пихать в таблицу с пользователем. Если ключь есть и он соответсвует, то производить автоматическую авторизацию.
 
Допустим я не авторизован, первое условие не выполняется (session_id() пустой), допустим второе тоже не выполняется, то тогда какого черта session_encode(); и var_dump($_SESSION); содержат сессионные данные? Я понимаю, session_start(); заново стартует, но почему они не убиты?
 
А повторное выполнение session_start не будет приводить к обнулению сессионных данных, для этого нужно использовать session_unset
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху