Проблема с переменными сессий

(Ответов: 6, Просмотров: 733)
  1. Новичок
    • Регистрация: 07.11.2011
    • Сообщений: 5
    • Репутация: 0
    Итак, проблема такая: делаю авторизацию. Переменные для обработчика передаю методом POST. Стартуется сессия на каждой странице. Переменные POST (логин и пароль) заношу в массив с ключами $_SESSION['login'] и $_SESSION['pass']. На первую страницу сразу после авторизации этот массив еще сохраняет значения логина и пароля, но если кликаю на ссылке и пытаюсь перейти на другую страницу, то массив становится пустым... как так получается? мне надо чтобы, они сохранялись.

    Тоесть, нужно, чтобы я один раз вбил в форму логин и пароль и чтобы они сохранялись в массиве $_SESSION все время, пока я с этим массивом не сделаю unset.
    Последний раз редактировалось Hardander; 26.08.2013 в 15:56.
    • 0
  2. Дипломник Аватар для Tiefe
    • Регистрация: 17.12.2012
    • Сообщений: 120
    • Репутация: 18
    Переменные сессии по умолчанию сохраняются пока открыто окно браузера, если его закрыть, то сессия обрывается. Можно вручную выставить время жизни сессии, тогда сохранится на выставленное время, например 3600 секунд.
    • 0
  3. Новичок
    • Регистрация: 07.11.2011
    • Сообщений: 5
    • Репутация: 0
    Tiefe, Да... все верно!! раньше когда делал авторизацию, у меня переменные сессии тянулись до тех пор, пока не захлопну браузер... Но сейчас - почему то не так же как всегда... вот как вывожу контент

    PHP код:
    public function getContent()
            {
                global 
    $dbClass// это класс, откуда беру данные, полученные от запросов к базе данных
                
                            #####это все необходимые переменные#######
                
    $page trim(htmlspecialchars($_GET['page']));         //передаю страницу
                
    $section trim(htmlspecialchars($_GET['section']));   //передаю раздел
                
    $submit trim(htmlspecialchars($_POST['submit']));    //это кнопка формы submit
                
    $login trim(htmlspecialchars($_POST['login']));        //это поле, куда вбиваю логин
                
    $pass trim(htmlspecialchars($_POST['pass']));        // это поле, куда вбиваю пароль
                

                            ############Условие вывода формы авторизации############
                
    if($page == 'authorisation')
                {
                    
    $content $this->getAuthorisationForm(); // вывод авторизационной формы
                    
                
    }
                
    ########################################################            
                
                
    if($page == 'workarea')
                {
                    
    $user_info $dbClass->queryUser($login);           //результат запроса юзера в одной переменной
                    
    $user_data_arr mysql_fetch_assoc($user_info); //массив, содержащий данные о пользователе, имя которого $login
                    
                    
    if($user_data_arr['login_user'] == $login)             // проверка соответствия логина из формы и логину в базе данных
                    
    {        
                        if(
    $user_data_arr['login_pass'] == $pass)    // проверка соответствия паролей
                        
    {
                            
    $_SESSION['login'] = $user_data_arr['login_user'];     //заносятся POST переменные в массив $_SESSION
                            
    $_SESSION['pass'] = $user_data_arr['login_pass'];     //заносятся POST переменные в массив $_SESSION
                            
    $_SESSION['priveleges'] = $user_data_arr['priveleges_user'];  //заносятся POST переменные в массив $_SESSION
                            
                                
    if($_SESSION['login'] != ''// если переменная сессии не пустая, то выводить контент
                                
    {
                                    
    $content 'Вы вошли в рабочую зону администратора';
                                    
    $content .= $this->getMenuAfterAuthorisation();
                                    
    $content .= $_SESSION['login']; //здесь еще переменная выводится
                                    
    if($section == 1)
                                    {
                                        
    $content .= $this->getPageCompany();
                                        
    $content .= $_SESSION['login']; // здесь ее уже не видно
                                    
    }
                                }
                                else
                                {
                                    
    $content .= $this->getAuthorisationForm();
                                }
                                
                        }
                        else
                        {
                            
    $content $this->getAuthorisationForm();
                            
    $content .= 'Неправильный пароль';
                        }
                    }
                    else
                    {
                        
    $content $this->getAuthorisationForm();
                        
    $content .= 'Неправильный логин';
                    }
                        
                }
                
                return 
    $content;            
            } 
    • 0
  4. Новичок
    • Регистрация: 26.08.2013
    • Сообщений: 5
    • Репутация: 0
    А как Вы "сессию стартуете"? Функцию session_start() в начале скрипта применяете?
    • 0
  5. Новичок
    • Регистрация: 07.11.2011
    • Сообщений: 5
    • Репутация: 0
    mr.Verman, вывод контента делаю в отдельном файле

    PHP код:
    <?php
        $mainClass
    ->getSessionStart(); // здесь просто одна строчка session_start();
    ?>
    <!DOCTYPE HTML>
    <html>
        <head>
            <link href="/css/style.css" rel="stylesheet" type="text/css">
        </head>
        <body>
            <?php
                
    echo $mainClass->getContent(); // здесь выводится контент в зависимости от различных параметров
            
    ?>
        </body>
    </html>

    Если стартану сессию внутри метода getContent(), то получу ошибку, что заголовки уже отправлены
    Последний раз редактировалось Hardander; 26.08.2013 в 17:27.
    • 0
  6. Дипломник
    • Регистрация: 15.07.2013
    • Сообщений: 189
    • Репутация: 43
    • Webmoney BL: ?
    Hardander, навскидку задам три вопроса:
    - значения в $_SESSION нигде не перезаписываются пустыми значениями?
    - на стороне сервера всё корректно? (в частности, создаются ли сессионные файлы)
    - куки устанавливаются?

    Если не срабатывает второй или третий пункт, то сервер не может определить идентификатор сессии, и, как вывод, у вас всё и теряется.
    • 0
  7. Дипломник
    • Регистрация: 06.06.2011
    • Сообщений: 105
    • Репутация: 11
    чуть оффтопа
    а зачем ?
    PHP код:
    if($user_data_arr['login_user'] == $login
    если уже
    PHP код:
    $user_data_arr mysql_fetch_assoc($user_info); //массив, содержащий данные о пользователе, имя которого $login 
    • 0

Похожие темы

Темы Раздел Ответов Последний пост
Проблема в ipb 3.2.3
CMS 0 12.10.2012 17:08
Проблема с RDS bar'ом
Софт, скрипты, сервисы 8 17.09.2012 01:43
проблема в ИЕ
Web программирование 5 02.10.2011 13:38
Проблема с ДЛЕ
Софт, скрипты, сервисы 2 27.01.2010 14:12

У кого попросить инвайт?

Вы можете попросить инвайт у любого модератора:

Информеры