В чем отличие сессии от куки? Как сессия хранится на сервере? Для каждого пользователя создается новый id? Как установить время жизни сессии?
При использовании сессий данных хранятся на сервере, но им присваивается идентификатор в виде случайной строки. И этот идентификатор уже хранится в пользовательской куке. Как-то так.
Сессии для лентяев? Штатно в сессиях тоже используются куки С этим могут быть проблемы. Хотя все возможности для этого как бы есть, но работает до сих пор криво. --- Добавлено --- По-любому, на время жизни, основанное на куках, полагаться не нужно. Используйте серверный «ограничитель времени». --- Добавлено --- Вот коллега оставил развернутый коммент на эту тему к моей статье: http://gency.ru/comment/64
Привет всем! Помогите разобраться с кодом, ошибка как раз по сессии. Ошибка в скриншоте, ругается на файл bd.php Что ему не нравится в сессии? подскажите пожалуйста. Заранее спасибо! 1 файл bd.php Код (Text): session_start(); $id_user = $_SESSION['id']; $login = $_SESSION['login']; $password = $_SESSION['password']; mysql_connect ("localhost","login","pas"); mysql_select_db ("test"); mysql_query("SET NAMES utf8"); 2 файл index.php Код (Text): <?php include_once("include/bd.php"); ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>............</title> <style type="text/css"> INPUT { background: silver; /* Цвет фона */ } </style> </head> <body> <?php if(empty($login) and empty($password)){ print <<<HERE <table align="center" class="tab1"> <p align="center"><h2 align="center">Здравствуй, дорогой друг!</h2></p> <br> Вход: <br> <br> <form action="login.php" method="POST" align="center"> <tr align="center"> <td align="center">Логин:</td> <td align="center"> <input type="text" name="login" ></td> </tr> <tr align="center"> <td>Пароль:</td> <td><input type="password" name="password" ></td> </tr> <tr align="center"> <td colspan="2"><input type="submit" value="Войти" name="submit" ></td> </tr> </form> </table> <br><br><a href="registration.php">Страница регистрации</a> HERE; } else{ echo "<div align='center'>"; echo "<table class='tab2' border='1' width='1000' height='900'>"; echo "<tr>"; echo "<td height='96' colspan='2' align='center'><a href=".MAIN_PAGE_URL.">".MAIN_PAGE."</a> | <a href=".INFO_PAGE_URL.">".INFO_PAGE."</a></td>"; echo "</tr>"; echo "<tr>"; echo "<td align='left' valign='top'>1234567890</td>"; echo "<td width='196' align='left' valign='top'>Приветствуем тебя, <strong>".$login."!!!</strong><br><br><br><a href=".EXIT_URL.">Выход из учётной записи</a></td>"; echo "</tr>"; echo "<tr>"; echo "<td height='69' colspan='2' align='center'>00000000000</td>"; echo "</tr>"; echo "</table>"; echo "</div>"; } ?> </body> </html> 3 файл login.php Код (Text): <?php include_once("include/bd.php"); ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Форма входа</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> </head> <body> <?php if (isset($_POST['login'])) { $login = $_POST['login']; if ($login == '') { unset($login); exit ("Введите пожалуйста логин!<br><a href='index.php'>Вернуться на страницу входа</a>"); } } if (isset($_POST['password'])) { $password=$_POST['password']; if ($password =='') { unset($password); exit ("Введите пароль"); } } $login = stripslashes($login); $login = htmlspecialchars($login); $password = stripslashes($password); $password = htmlspecialchars($password); $login = trim($login); $password = trim($password); $password = md5($password);//шифруем пароль $user = mysql_query("SELECT id FROM users WHERE login='$login' AND password='$password'"); $id_user = mysql_fetch_array($user); if (empty($id_user['id'])){ exit ("Извините, введённый вами логин или пароль неверный. <a href='index.php'><p><input type='submit' value='Вернуться на главную страницу' name='B1'></p></a>"); } else { $_SESSION['password']=$password; $_SESSION['login']=$login; $_SESSION['id']=$id_user['id']; } echo "<meta http-equiv='Refresh' content='0; URL=index.php'>"; ?> </body> </html>
Прежде, чем так делать PHP: $id_user = $_SESSION['id']; Надо проверять, есть ли такая сессия --- Добавлено --- где ты откопал mysql?
Мимо. То, что подключаемый файл дергает из нее данные, которых в ней нет. Ты инклудишь файл до того, как скрипт сделает хоть какую-то работу и, ессно, до того, как в сессию что-то будет записано, и сразу пытаешься из нее читать: PHP: $id_user = $_SESSION['id']; $login = $_SESSION['login']; $password = $_SESSION['password']; Ну а в ошибках ясно написано, что ты пытаешься получить данные по несуществующему индексу. Отсюда вывод - видим ошибку, значит первым делом переводим ее на русский и осознаем ее смысл. Ошибка - это не просто факт, что что-то не так. Это подсказка, что не так и где. расширение mysql_ устарело и было удалено из современного php. Сейчас используется расширение mysqli_. Это значит, что ты используешь достаточно старую версию php, что даже deprecated-ворнинги не выпадают. А с php7+ твой код просто не будет работать. Переписывай на mysqi_ уже сейчас. Далее: PHP: $login = stripslashes($login); $login = htmlspecialchars($login); $password = stripslashes($password); $password = htmlspecialchars($password); $login = trim($login); $password = trim($password); $password = md5($password);//шифруем пароль Все. Очень. Плохо. Опиши, что делает этот код, а, главное, зачем. P.S. Я понимаю, что ты его не писал, а скопипастил откуда-то из 20го века. Но все же. Надо понимать, что ты делаешь, так что опиши конкретно этот фрагмент. А потом мы разберем вместе, почему так делать нельзя.