За последние 24 часа нас посетили 21599 программистов и 1042 робота. Сейчас ищут 650 программистов ...

Session и Cookie

Тема в разделе "PHP для новичков", создана пользователем Konstant1n, 13 мар 2019.

Метки:
  1. Konstant1n

    Konstant1n Активный пользователь

    С нами с:
    14 авг 2017
    Сообщения:
    273
    Симпатии:
    1
    Адрес:
    Волгоград
    В чем отличие сессии от куки?
    Как сессия хранится на сервере? Для каждого пользователя создается новый id?

    Как установить время жизни сессии?
     
    #1 Konstant1n, 13 мар 2019
    Последнее редактирование: 13 мар 2019
  2. Ivan Vanko

    Ivan Vanko Новичок

    С нами с:
    3 мар 2019
    Сообщения:
    20
    Симпатии:
    2
    При использовании сессий данных хранятся на сервере, но им присваивается идентификатор в виде случайной строки. И этот идентификатор уже хранится в пользовательской куке. Как-то так.
     
  3. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    @Konstant1n, хороший вопрос для человека который, цитирую: "Написал сайт на PHP MVC"
     
    Dron-Boy и miketomlin нравится это.
  4. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.794
    Симпатии:
    650
    Сессии для лентяев? :) Штатно в сессиях тоже используются куки ;)

    С этим могут быть проблемы. Хотя все возможности для этого как бы есть, но работает до сих пор криво.
    --- Добавлено ---
    По-любому, на время жизни, основанное на куках, полагаться не нужно. Используйте серверный «ограничитель времени».
    --- Добавлено ---
    Вот коллега оставил развернутый коммент на эту тему к моей статье: http://gency.ru/comment/64
     
  5. Evgeny_T

    Evgeny_T Новичок

    С нами с:
    19 мар 2019
    Сообщения:
    4
    Симпатии:
    0
    Привет всем!
    Помогите разобраться с кодом, ошибка как раз по сессии.
    Ошибка в скриншоте, ругается на файл bd.php
    Что ему не нравится в сессии? подскажите пожалуйста. Заранее спасибо!
    [​IMG]
    1 файл bd.php
    Код (Text):
    1. session_start();
    2. $id_user = $_SESSION['id'];
    3. $login = $_SESSION['login'];
    4. $password = $_SESSION['password'];
    5.  
    6. mysql_connect ("localhost","login","pas");
    7. mysql_select_db ("test");
    8. mysql_query("SET NAMES utf8");
    2 файл index.php
    Код (Text):
    1. <?php
    2. include_once("include/bd.php");
    3. ?>  
    4. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
    5. <html>
    6.     <head>
    7.         <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    8.         <title>............</title>
    9.         <style type="text/css">
    10.         INPUT {
    11.         background: silver; /* Цвет фона */
    12.         }
    13.         </style>
    14.     </head>
    15. <body>
    16.  
    17. <?php
    18. if(empty($login) and empty($password)){
    19. print <<<HERE
    20. <table align="center" class="tab1">
    21. <p align="center"><h2 align="center">Здравствуй, дорогой друг!</h2></p>
    22. <br>
    23. Вход:
    24. <br>
    25. <br>
    26.       <form action="login.php" method="POST" align="center">
    27.       <tr align="center">
    28.       <td align="center">Логин:</td>
    29.       <td align="center"> <input type="text" name="login" ></td>
    30.       </tr>
    31.      
    32.       <tr align="center">
    33.       <td>Пароль:</td>
    34.       <td><input type="password" name="password" ></td>
    35.       </tr>
    36.      
    37.         <tr align="center">
    38.       <td colspan="2"><input type="submit" value="Войти" name="submit" ></td>
    39.       </tr>
    40.       </form>
    41.       </table>
    42. <br><br><a href="registration.php">Страница регистрации</a>
    43. HERE;
    44. }
    45. else{
    46. echo "<div align='center'>";
    47. echo    "<table class='tab2' border='1' width='1000' height='900'>";
    48. echo        "<tr>";
    49. 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>";
    50. echo        "</tr>";
    51. echo        "<tr>";
    52. echo            "<td align='left' valign='top'>1234567890</td>";
    53. echo            "<td width='196' align='left' valign='top'>Приветствуем тебя, <strong>".$login."!!!</strong><br><br><br><a href=".EXIT_URL.">Выход из учётной записи</a></td>";
    54. echo        "</tr>";
    55. echo        "<tr>";
    56. echo            "<td height='69' colspan='2' align='center'>00000000000</td>";
    57. echo        "</tr>";
    58. echo     "</table>";
    59. echo "</div>";
    60. }
    61. ?>
    62. </body>
    63. </html>
    3 файл login.php
    Код (Text):
    1. <?php
    2. include_once("include/bd.php");
    3. ?>
    4. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    5. <html>
    6. <head>
    7. <title>Форма входа</title>
    8. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    9. </head>
    10. <body>
    11.  
    12. <?php
    13. if (isset($_POST['login'])) {
    14.     $login = $_POST['login'];
    15.     if ($login == '') {
    16.         unset($login);
    17.         exit ("Введите пожалуйста логин!<br><a href='index.php'>Вернуться на страницу входа</a>");
    18.     }
    19. }
    20. if (isset($_POST['password'])) {
    21.     $password=$_POST['password'];
    22.     if ($password =='') {
    23.         unset($password);
    24.         exit ("Введите пароль");
    25.     }
    26. }
    27.  
    28. $login = stripslashes($login);
    29. $login = htmlspecialchars($login);
    30.  
    31. $password = stripslashes($password);
    32. $password = htmlspecialchars($password);
    33.  
    34.  
    35. $login = trim($login);
    36. $password = trim($password);
    37.  
    38. $password = md5($password);//шифруем пароль
    39.  
    40. $user = mysql_query("SELECT id FROM users WHERE login='$login' AND password='$password'");
    41. $id_user = mysql_fetch_array($user);
    42. if (empty($id_user['id'])){
    43.     exit ("Извините, введённый вами логин или пароль неверный. <a href='index.php'><p><input type='submit' value='Вернуться на главную страницу' name='B1'></p></a>");
    44. }
    45. else {
    46.  
    47.  
    48. $_SESSION['password']=$password;
    49. $_SESSION['login']=$login;
    50. $_SESSION['id']=$id_user['id'];
    51.          
    52. }
    53. echo "<meta http-equiv='Refresh' content='0; URL=index.php'>";
    54. ?>
    55. </body>
    56. </html>
     
  6. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.199
    Симпатии:
    184
    Прежде, чем так делать

    PHP:
    1. $id_user = $_SESSION['id'];
    Надо проверять, есть ли такая сессия
    --- Добавлено ---
    где ты откопал mysql?
     
  7. Evgeny_T

    Evgeny_T Новичок

    С нами с:
    19 мар 2019
    Сообщения:
    4
    Симпатии:
    0
    В смысле откопал?
     
  8. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.199
    Симпатии:
    184
    @Evgeny_T откуда узнал, что такое mysql?
     
  9. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.155
    Симпатии:
    1.769
    Адрес:
    :сердА
    Мимо.

    То, что подключаемый файл дергает из нее данные, которых в ней нет.
    Ты инклудишь файл до того, как скрипт сделает хоть какую-то работу и, ессно, до того, как в сессию что-то будет
    записано, и сразу пытаешься из нее читать:
    PHP:
    1. $id_user = $_SESSION['id'];
    2. $login = $_SESSION['login'];
    3. $password = $_SESSION['password'];
    Ну а в ошибках ясно написано, что ты пытаешься получить данные по несуществующему индексу. Отсюда вывод - видим ошибку, значит первым делом переводим ее на русский и осознаем ее смысл. Ошибка - это не просто факт, что что-то не так. Это подсказка, что не так и где.

    расширение mysql_ устарело и было удалено из современного php. Сейчас используется расширение mysqli_. Это значит, что ты используешь достаточно старую версию php, что даже deprecated-ворнинги не выпадают. А с php7+ твой код просто не будет работать. Переписывай на mysqi_ уже сейчас.

    Далее:

    PHP:
    1. $login = stripslashes($login);
    2. $login = htmlspecialchars($login);
    3.  
    4. $password = stripslashes($password);
    5. $password = htmlspecialchars($password);
    6.  
    7. $login = trim($login);
    8. $password = trim($password);
    9.  
    10. $password = md5($password);//шифруем пароль
    Все. Очень. Плохо.
    Опиши, что делает этот код, а, главное, зачем.

    P.S. Я понимаю, что ты его не писал, а скопипастил откуда-то из 20го века. Но все же. Надо понимать, что ты делаешь, так что опиши конкретно этот фрагмент. А потом мы разберем вместе, почему так делать нельзя.
     
    mkramer нравится это.