в общем есть такой файл, который проверяет при загрузке страницы "index.php", залогинен ли пользователь этот файл включен в "index.php" Код (PHP): <?php if (isset($_GET['out'])) { unset($_SESSION['login']); unset($_SESSION['id']); setcookie("login", "", 100); setcookie("id", "", 100); }; if (!isset($_SESSION['login']) or !isset($_SESSION['id'])) { unset($const_logined); }; if (empty($_SESSION['login']) or empty($_SESSION['id'])) { $const_logined = FALSE; } else { $const_logined = TRUE; }; ?> а также есть файл, который проверяет при вводе логина с паролем валидность введенных данных и ищет по базе нужный "id" Код (PHP): <html> <head> <meta http-equiv="Content-Type" content="text/html" charset="windows-1251"/> <link rel="stylesheet" href="../style.css" type="text/css"> <title>Добро пожаловать! - firstsite</title> </head> <body> <div id="ref"> <?php session_start(); if (isset($_POST['login'])) { $login = $_POST['login']; if ($login == '') { unset($login); }; }; if (isset($_POST['password'])) { $password=$_POST['password']; if ($password =='') { unset($password); }; }; if (empty($login) or empty($password)) { exit ("<div id=\"ref_err\">Вы ввели не всю информацию, вернитесь <a href='../index.php'>назад</a> и заполните все поля!</div>"); }; include ("dbase.php"); $login = stripslashes($login); $login = mysql_escape_string($login); $login = htmlspecialchars($login); $login = trim($login);$password = stripslashes($password); $password = mysql_escape_string($password); $password = htmlspecialchars($password); $password = trim($password); $password = md5($password); $query = " SELECT `login`, `password`, `id` FROM `usersdb` WHERE `login` = '{$login}' "; $result = mysql_query($query, $db); $myrow = mysql_fetch_assoc($result); if (empty($myrow['password'])) { exit ("<div id=\"ref_err\">Извините, введённое вами имя пользователя или пароль неверны. <a href='../index.php'>Главная страница</a></div>"); } else { if ($myrow['password']==$password) { $_SESSION['login']=$myrow['login']; $_SESSION['id']=$myrow['id']; if(isset($_POST['savelogin'])) { //setcookie("login", $_SESSION['login'], time() + 60*60*24*30); //setcookie("id", $_SESSION['id'], time() + 60*60*24*30); }; header('Refresh: 3; URL=../index.php'); echo "<div id=\"ref_ok\">Вы вошли! Через 2 сек. вы будете перенаправлены на главную страницу.<br>Если Ваш браузер не поддерживает автоматическое перенаправление, перейдите по <a href=\"../index.php\">этой ссылке</a></div>"; } else { exit ("<div id=\"ref_err\">Извините, введённый вами login или пароль неверный. <a href='../index.php'>Главная страница</a></div>"); }; }; ?> </div> </body> </html> при входе шаблон входа сменяется с такого вида: на такой: это наглядный индикатор того, вошел или нет вопрос - почему, когда сразу вхожу он работает на ура, а как только уже под сессией прохожу по какой-либо странице внутри сайта форма ввода показывается (как будто не залогинен)? вся мистика в том, что когда ЕЩЁ РАЗ прохожу по любой ссылке - формы нет. Видно, что я вошел на протяжении всей сессии вплоть до выхода.
Толком не вникал в суть вопроса, как-то сразу попался на глаза такой момент: Код (PHP): <html> <head> <meta http-equiv="Content-Type" content="text/html" charset="windows-1251"/> <link rel="stylesheet" href="../style.css" type="text/css"> <title>Добро пожаловать! - firstsite</title> </head> <body> <div id="ref"> <?php session_start(); В общем, приведённый выше фрагмент кода работать не должен. Функция session_start(), как и любая другая функция, работающая с HTTP-заголовками (например, setcookie()) должна вызываться ДО любого вывода в браузер.
тут Вы правы, это знаю, тупанул я вывожу вообще HTML здесь для красоты, это типа страницы редиректа проблема не здесь если бы он не допускал сессии до вывода в браузер, то не допускал бы их сразу, а так - сначала работает, затем пропадают сессии, затем опять появляются сначала я HTML вообще не писал, всё так и функционировало криво
я куки и не использую setcookie() - это задел на будущее пока не реализовано прочитайте, пожалуйста, вопрос внимательно и станет понятно, в чем проблема
да причем здесь то, что собачник сказал? раньше HTML не было у меня на этих страницах вообще, работало также тоже самое, только сверху Код (Text): <?php session_start(); ?> работает также
Если у вас там так дико сессии везде используются оградите свои session_name('имя'); А вообще просто внутри в файле у вас нет где то вызова сессии и усе а сессия сохранена и поэтому при попадании на страницу там вызов есть она срабатывает.. Либо на одном из файлов там что то до вызовы сессии в этом всем и копайте...
сессии используются не дико, как обычно весь сайт начинается с index.php, где сессии сразу стартуют Код (PHP): <?php session_start(); ini_set('display_errors',1); error_reporting(E_ALL); require_once('system/config.php'); require_once('system/logincheck.php'); ?> <html xmlns="http://www.w3.org/1999/xhtml"> ... .. . короче, вот видео снял, так даже попроще будет вам разобраться
Если сессии действительно стартуют и куки ставятся - то по идее должно работать. Думаю, ошибка где-то в другом месте. Как, например, проверяется, залогинен ли пользователь (в том месте, в котором выводится либо форма авторизации либо кнопка "Выход")? И ещё: на превью к видео видны Warning-и и Notice-ы. Что там написано? Оно не имеет отношение к этой ошибке?
куки пока не использую, это будет чекбокс "Запомнить меня" в общем есть такой файл, который проверяет при загрузке страницы "index.php", залогинен ли пользователь этот файл включен в "index.php" Код (PHP): <?php if (isset($_GET['out'])) { unset($_SESSION['login']); unset($_SESSION['id']); setcookie("login", "", 100); setcookie("id", "", 100); }; if (!isset($_SESSION['login']) or !isset($_SESSION['id'])) { unset($const_logined); }; if (empty($_SESSION['login']) or empty($_SESSION['id'])) { $const_logined = FALSE; } else { $const_logined = TRUE; }; ?> а остальные подключенные скрипты используют уже переменную $const_logined как проверку авторизации Код (PHP): <?php if ($const_logined == TRUE) { include('system/auth/logined.php'); } else { include('system/auth/unauth.php'); }; ?> ошибки и предупреждения на видео не имеют отношения к этой проблеме это там проверка одна недоработанная, но она не мешает
Может ту страничку, на которую редирект идёт, браузер достаёт из кэша? Попробуй при редиректе добавь какую-нибудь лабуду типа "index.php?random=" . rand();
это помогло, спасибо большое интересно, у меня GET-переменная-идентификатор контента на правой части сайта называется "id" когда вставляю при редиректе рэндомное значение именно в "id", то всё отлично получается а когда заменяю его на любое другое имя, то, естесственно, это имя нигде не обрабатывается и все случается как и раньше, как показано на видео поскольку не очень опытен ещё в PHP - не мог бы и додуматься до этого сам можете объяснить, почему так происходит?
Ну тут даже не в PHP дело, а в браузере. Он просто "смотрит", что недавно заходил на страничку с адресом "index.php?id=main" и даже не делает запрос на сервер. Она же у него в памяти уже есть с таким адресом - он её же тебе снова и показывает. Браузер какой? Можно ставить специальные http-заголовки, чтобы запретить браузеру кэшировать ("запоминать") странички, чтобы он каждый раз заново делал запрос на сервер и отображал ответ.
так еще настроить надо. по умолчанию браузерам запрещено кешировать если есть данные GET или POST. в случае с пост - обязательна повторная отправка. в случае с GET - как минимум запрос из группы IF-*.
Я вот че думаю. Подход с видео мне понравился. Куда-то бы в топик о ламерстве добавить. Пусть остальные страждущие тоже фильмуют свою проблему на видео. А если девчонки - то снимать на камеру не код, а .... ну вы поняли Это существенно ускорит поиск проблемы)))