Работа с сессиями PHP
Здравствуйте! Подскажите как правильно сделать!?
Скрипт авторизации <?php //Выход из авторизации if(isset($_GET['exit']) == true){ //Уничтожаем сессию session_destroy(); //Делаем редирект header('Location:'. BEZ_HOST .'?mode=auth'); exit; } //Если нажата кнопка то обрабатываем данные if(isset($_POST['submit'])) { //Проверяем на пустоту if(empty($_POST['email'])) $err[] = 'Не введен Логин'; if(empty($_POST['pass'])) $err[] = 'Не введен Пароль'; //Проверяем email //if(emailValid($_POST['email']) === false) // $err[] = 'Не корректный E-mail'; //Проверяем наличие ошибок и выводим пользователю if(count($err) > 0) echo showErrorMessage($err); else { /*Создаем запрос на выборку из базы данных для проверки подлиности пользователя*/ $sql = 'SELECT * FROM `'. BEZ_DBPREFIX .'reg` AS `u` LEFT JOIN `'. BEZ_DBPREFIX .'role` AS `r` ON `u`.`role` = `r`.`id_role` WHERE `login` = :email AND `status` = 1'; //Подготавливаем PDO выражение для SQL запроса $stmt = $db->prepare($sql); $stmt->bindValue(':email', $_POST['email'], PDO::PARAM_STR); $stmt->execute(); //Получаем данные SQL запроса $rows = $stmt->fetchAll(PDO::FETCH_ASSOC); //Если логин совподает, проверяем пароль if(count($rows) > 0) { //Получаем данные из таблицы if(md5(md5($_POST['pass']).$rows[0]['salt']) == $rows[0]['pass']) { //Переменные для работы с залогиненым пользователем! $_SESSION['user'] = true; $_SESSION['login'] = $_POST['email']; $_SESSION['role'] = $rows[0]['role']; $_SESSION['name'] = $rows[0]['name']; //Сбрасываем параметры header('Location:'. BEZ_HOST .'?mode=auth'); exit; } else echo showErrorMessage('Неверный пароль!'); }else{ echo showErrorMessage('Логин <b>'. $_POST['email'] .'</b> не найден!'); } } } ?> Страница шаблона <!DOCTYPE html> <html> <head> <!-- Start META --> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <meta name="keywords" content="Разработка, движка" /> <meta name="description" content="Разработка, моего движка" /> <!-- TITLE --> <title>Главная страница</title> <!-- Start Sheets CSS --> <link href="./css/style.css" rel="stylesheet" type="text/css"> </head> <body> <div id="wrap"> <div id="menu"> <div class="menu"> <ul> <li><?php if($_SESSION['role'] == 1) echo "СуперАдмин"?> </li> <li><a href="<?php echo BEZ_HOST; ?>?mode=auth">Войти</a></li> <li><a href="<?php echo BEZ_HOST; ?>?mode=reg">Регистрация</a></li> </ul> </div> </div> <div style="clear:both;"></div> <div id="content"> <?php echo $content; ?> </div> </div> </body> </html> При первоначальном открытии страницы возникает ошибка. Notice: Undefined index: role in /home/host1579103/kserial.ru/htdocs/www/html/index.htm on line 19 как избежать подобного можно? |
Работа с сессией, а где же ее старт?
Речь идет об авторизации, значит уникальный пользователь, значит запрос должен вернуть только одну запись, зачем же fetchAll()? id_role - нет определения, либо это переменная, которая должна быть указана как $id_role, либо это поле таблицы BEZ_DBPREFIX.role. Разобраться нужно с этим. Код выставляемый нужно форматировать. |
Прошу прощения! Разобрался, с ситуацией данной вроде как....
Головной файл //Запускаем сессию session_start(); //Устанавливаем кодировку и вывод всех ошибок header('Content-Type: text/html; charset=UTF8'); error_reporting(E_ALL); //Включаем буферизацию содержимого ob_start(); //Определяем переменную для переключателя $mode = isset($_GET['mode']) ? $_GET['mode'] : false; $user = isset($_SESSION['user']) ? $_SESSION['user'] : false; $role = isset($_SESSION['role']) ? $_SESSION['role'] : false; $err = array(); //Устанавливаем ключ защиты define('BEZ_KEY', true); //Подключаем конфигурационный файл include './config.php'; //Подключаем скрипт с функциями include './func.php'; //подключаем MySQL include './bd.php'; switch($mode) { //Подключаем обработчик с формой регистрации case 'reg': include './reg.php'; include './reg_form.htm'; break; //Подключаем обработчик с формой авторизации case 'auth': include './auth.php'; include './auth_form.htm'; include './show.php'; break; } //Данные с буфера меню $menu= ob_get_contents(); //Получаем данные с буфера контент $content = ob_get_contents(); ob_end_clean(); //Подключаем наш шаблон include './html/index.htm'; ?> ошибка исчезла.... |
Цитата:
if($menu===$content) exit('Achtung!'); |
Часовой пояс GMT +3, время: 17:37. |