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

Тема в разделе "PHP", создана пользователем sultan347, 26 янв 2010.

Статус темы:
Закрыта.
Модераторы: latteo
  1. sultan347

    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();, что бы задать время жизни, что то типа:
    PHP:
         function startSession($time=0,$ses='myses') {
            
    ini_set('session.gc_maxlifetime',$time);
            
    ini_set('session.cookie_lifetime',$time);
            
    session_set_cookie_params($time,'/');
            
    session_name($ses);
            
    session_start();
        }
     
  2. Mr.Emm

    Mr.Emm Постоялец

    Регистр.:
    5 май 2008
    Сообщения:
    144
    Симпатии:
    107
    Вызывай session_start только один раз в начале скрипта ДО любого вывода,
    а далее выполняй нужные тебе манипуляции с сессиями.. например, юзер входит на сайт, ты в скрипте проверяешь нет ли для него нужной сессии, если нет проверяем может есть у него ранее сохраненная кука для авторизации, если есть кука разбираем ее(в ней может содержаться логин и хеш пароля) и авторизуем юзера. Если ни того ни другого нет, то пользователь гость, но он, например, уже зарегистрирован на сайте и решил войти, водит логин пароль, мы в скрипте получаем все это сверяем с тем что в базе, если сходится устанавливаем сессию(OK) и куку с данными авторизации на 1 месяц, ее в нужный момент можно удалять.
    Сессия в любом случае будет, а вот нужная инфа для доступа будет только у авторизованного пользователя.
     
  3. serjinio

    serjinio

    Регистр.:
    10 май 2007
    Сообщения:
    439
    Симпатии:
    49
    Не обязательно надо стартовать сессию в начале скрипта ,можно в любой его части, перед тем, как потребуется работать с сессией ,только правильно замечено, до любого вывода и только один раз .
     
  4. krenkus

    krenkus Создатель

    Регистр.:
    10 мар 2008
    Сообщения:
    37
    Симпатии:
    4
    На самом деле, если значения в $_SESSION есть, значит сессия уже запущена...
    при повторном запуске происходит обнуление... чтобы этого избежать используй:
    if(session_id() == "")
    {
    session_set_cookie_params( 0, '/' );
    session_start();
    }

    но месяц сессии не хранятся, для этого используется дополнительная кука (для функции "запомнить меня"), туда кладется уникальный ключь, который надо пихать в таблицу с пользователем. Если ключь есть и он соответсвует, то производить автоматическую авторизацию.
     
    sultan347 нравится это.
  5. sultan347

    sultan347

    Регистр.:
    25 апр 2009
    Сообщения:
    230
    Симпатии:
    7
    PHP:
    function IsAuth(){
        if(!
    session_id()=='')  //условно первое условие
        
    {    
        
    процесс авторизации
        
    }
        else
        {   
            
    $_SESSION = array();
            
    $query mysql_query(.....);
            
    $row=mysql_fetch_array($query);
            if(
    mysql_num_rows($query) > '0'//условно второе условие
            
    {
            
    startSession();
            
    $_SESSION['id']=$row['id'];
            
    IsAuth();
            return;
            }
          else
            {
            
    startSession(0); //третье условие
            
    return;
            }
        }
    }
    Допустим я не авторизован, первое условие не выполняется (session_id() пустой), допустим второе тоже не выполняется, то тогда какого черта session_encode(); и var_dump($_SESSION); содержат сессионные данные? Я понимаю, session_start(); заново стартует, но почему они не убиты?
     
  6. krenkus

    krenkus Создатель

    Регистр.:
    10 мар 2008
    Сообщения:
    37
    Симпатии:
    4
    А повторное выполнение session_start не будет приводить к обнулению сессионных данных, для этого нужно использовать session_unset
     
Статус темы:
Закрыта.