Итак, проблема такая: делаю авторизацию. Переменные для обработчика передаю методом POST. Стартуется сессия на каждой странице. Переменные POST (логин и пароль) заношу в массив с ключами $_SESSION['login'] и $_SESSION['pass']. На первую страницу сразу после авторизации этот массив еще сохраняет значения логина и пароля, но если кликаю на ссылке и пытаюсь перейти на другую страницу, то массив становится пустым... как так получается? мне надо чтобы, они сохранялись.
Тоесть, нужно, чтобы я один раз вбил в форму логин и пароль и чтобы они сохранялись в массиве $_SESSION все время, пока я с этим массивом не сделаю unset.
Последний раз редактировалось Hardander; 26.08.2013 в 15:56.
Переменные сессии по умолчанию сохраняются пока открыто окно браузера, если его закрыть, то сессия обрывается. Можно вручную выставить время жизни сессии, тогда сохранится на выставленное время, например 3600 секунд.
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(); }
<?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.
Hardander, навскидку задам три вопроса: - значения в $_SESSION нигде не перезаписываются пустыми значениями? - на стороне сервера всё корректно? (в частности, создаются ли сессионные файлы) - куки устанавливаются?
Если не срабатывает второй или третий пункт, то сервер не может определить идентификатор сессии, и, как вывод, у вас всё и теряется.