За последние 24 часа нас посетили 38850 программистов и 1284 робота. Сейчас ищут 1048 программистов ...

Как работают куки

Тема в разделе "PHP для новичков", создана пользователем Hollow, 19 янв 2015.

  1. Hollow

    Hollow Новичок

    С нами с:
    19 янв 2015
    Сообщения:
    3
    Симпатии:
    0
    Долгое время не могу понять, почему не считываются куки сайта. Пишутся, но не читаются. Вот код
    Код (PHP):
    1. <?php 
    2. SetCookie('login', $login, time() +60,  "/");
    3.                     SetCookie('password', $pass, time() +60, "/");
    4. require ('connect.php');
    5. $login = @$_COOKIE['login'];
    6. $password = @$_COOKIE['password'];
    7. $do = $_GET['do'];
    8.  
    9.  
    10. $page = $_GET['page'];
    11. if($page == ''){
    12.     $page='main';
    13. }
    14. $r_email = $_POST['mail_reg'];
    15. $r_pass1 = $_POST['pass1_reg'];
    16. $r_pass2 = $_POST['pass2_reg'];
    17. $r_login = $_POST['login_reg'];
    18. $r_name = $_POST['name_reg'];
    19. $r_firstname = $_POST['firstname_reg'];
    20. $r_city = $_POST['city_reg'];
    21. $r_school = $_POST['school_reg'];
    22. $r_class = $_POST['class_reg'];
    23. $r_about = $_POST['about_reg'];
    24.  
    25.  
    26. $number = $_GET['number'];
    27. ?>
    28. <html>
    29. <head>
    30. <meta http-equiv="content-type" content="text/html; charset=utf-8" />
    31. <meta name="description"  
    32. content="Неофициальный сайт Гиманзии №2 им. И.П.Павлова г.Рязань." />
    33.     <meta name="keywords" content="Рязань, школа, №, 2, гимназия, сайт, неофициальный, имени, им, Павлова, Ордена, знак, почета, рязань, соборная, духовное, училище, gymnasyon, gymnasium, #, Pavlov, ryazan, rzn, рзн, sobornaya" />
    34.     
    35.         <meta name="author" content="Маслов Павел, Ходакова евгения, Байзер Маргарита" />
    36. <title>
    37.     Неофициальный сайт Гиманзии №2 г.Рязань
    38. </title>
    39. <link href="css/style.css" rel="stylesheet" type="text/css" media="screen"  />
    40.  
    41. </head>
    42.  
    43. <body>
    44. <center>
    45. <ul id="navigation" class="nav-main">
    46.     <li>[url="index.php"]Главная[/url]</li>
    47.     
    48.     <li>[url="index.php?page=news"]Новости[/url]</li>
    49.     <!-- <li  class="list"><a>Разделы</a>
    50.     <ul class="nav-sub">    
    51.         <li>[url="#"]Спорт[/url]</li>
    52.         <li>[url="#"]Точные науки[/url]</li>
    53.         <li>[url="#"]Гуманитарные науки[/url]</li>
    54.         <li>[url="#"]Естественные науки[/url]</li>
    55.         <li>[url="#"]Иностранные языки[/url]</li> 
    56.     </ul>
    57.     </li>-->
    58.     <li>[url="index.php?page=samupr"]Школьное самоуправление[/url]</li>
    59.     <li>[url="index.php?page=alma_matter"]Alma Matter[/url]</li>
    60.     <li class="list"><a>О нас</a>
    61.     <ul class="nav-sub">
    62.         <li>[url="index.php?page=school"]О школе[/url]</li>
    63.         <li>[url="index.php?page=developers"]Разработчики[/url]</li>
    64.     </ul></li>
    65.     <li class="list"><a>Учителя</a>
    66.     <ul class="nav-sub">
    67.         <li>[url="index.php?page=director"]Директор[/url]</li>
    68.         <li>[url="index.php?page=teachers_middle"]Учителя средней и старшей школы[/url]</li>
    69.         <li>[url="index.php?page=teachers_young"]Учителя младшей школы[/url]</li>
    70.         <li>[url="index.php?page=gpd"]Группа продленного дня[/url]</li> 
    71.     </ul></li> 
    72.     
    73. </ul>
    74.  
    75. </center>
    76. <br />
    77. <div class="wrapper">
    78. <div class="rigth_column"><?php
    79.     if (!empty($login)) {
    80.     
    81.          echo '[url="index.php?t=' . $t . '&do=exit"]Выйти[/url]';
    82.                     if ($login == 'admin') {
    83.         echo '<br />[url="index.php?t=admin"]Админка[/url]';}
    84.     echo '<br />[url="index.php?t=comments"]Оставить комментарий[/url]';
    85. } else {
    86.      
    87. $login = $_POST['login'];
    88.     $password = md5($_POST['password']);
    89.     if (isset($login) && isset($password)) {
    90.         if (!empty($login) && !empty($password) && $login != "" && $password != "") {
    91.             $login_query1 = mysql_query("SELECT * FROM `users` WHERE `login` = '$login'");
    92.             $login_array1 = mysql_fetch_array($login_query1);
    93.             if (!empty($login_array1)) {
    94.                 $pass_query = mysql_query("SELECT * FROM `users` WHERE `login` = '$login '");
    95.                 while ($pass_array = mysql_fetch_array($pass_query)) {
    96.                     $pass = $pass_array['password'];
    97.                     $id = $pass_array['id'];
    98.                 }
    99.                 if ($pass == $password) {
    100.                     $_SESSION["login"] = $login;
    101.                     $_SESSION["password"] = $password;
    102.                    SetCookie('login', $login, time() +60,  "/");
    103.                     SetCookie('password', $pass, time() +60, "/");
    104.  
    105.                     echo '[url="index.php?t=' . $page . '&do=exit"]Exit[/url]';
    106.                     $is = 's';
    107.                     if ($login == 'admin') {
    108.         echo '<br />[url="index.php?t=admin"]Админка[/url]';}
    109.       
    110.                     
    111.     echo '<br />[url="index.php?t=comments"]Оставить комментарий[/url]';
    112.              
    113.  
    114.                 } else {
    115.                     echo 'Неверныйs пароль или логин';
    116.                 }
    117.             } else {
    118.                 echo 'Неверный пароль или логин';
    119.             }
    120.         } else {
    121.             echo 'Неверный пароль или логин';
    122.         }
    123.     }
    124.     if (empty($is)) {
    125.         echo '<center><h3 style="margin: 1px;">вход</h3></center><br />
    126.                     <form method="POST">
    127.                      <label>Логин:      </label><input name="login" type="text" /><br />
    128.                      <label>Пароль:</label><input name="password" type="password" /><br />
    129.                     <center><input type="submit" value="Войти" /></center>
    130.                     </form><br />
    131.                     [url="index.php?t=reg"]Регистрация[/url]';
    132.  
    133. }
    134. }
    135.     $ar = mysql_query("SELECT * FROM `news` ORDER BY `id` DESC LIMIT 2");
    136.     while ($mqrow = mysql_fetch_array($ar)) {
    137.     $id_sn = $mqrow['id'];
    138.     $t_s1 = htmlspecialchars_decode($mqrow['name']);
    139.     $m_s1 = htmlspecialchars_decode($mqrow['text']);
    140.     //разбиваем на массив
    141.     $arar_str = explode(" ", $m_s1);
    142.     //берем первые 10 элементов
    143.     $arar = array_slice($arar_str, 0, 10);
    144.     //превращаем в строку
    145.     $n1_str = implode(" ", $arar);
    146.  
    147.     // Если необходимо добавить многоточие
    148.     if (count($arar_str) > 10) {
    149.         $n1_str .= '...';
    150.     }
    151.     $date = htmlspecialchars_decode($mqrow['dat']);
    152.     echo '<div id="short_news"><center><h3>';
    153.     echo $t_s1;
    154.     echo '</h3></center>'.$m_s1.'<br /><right><b>Дата:</b> ';
    155.     echo $date . '</right><br />
    156.     [url="index.php?page=news#'.$id_sn.'"]>[/url]</div><hr />';}
    157.         ?>
    158.     </div>
    159. <div style="clear: left;" ></div><div style="clear: rigth;" ></div>
    160.     <div class="main_content">
    161.         <?php 
    162.             if($page !== 'news' && $page!=='reg'){
    163.                 $page_query = mysql_query("SELECT * FROM `content` WHERE `title`='$page'");
    164.                 while ($page_content = mysql_fetch_array($page_query)) {
    165.                     $pages_name = htmlspecialchars_decode($page_content['name']);
    166.                     $content = htmlspecialchars_decode($page_content['text']);
    167.                     echo '<center><h2>'.$pages_name.'</h1></center>';
    168.                     echo '<p id="pages_content">'.$content.'</p>';
    169.                 }
    170.                     if($page == 'teachers_middle'){
    171.                         $teachers_query = mysql_query("SELECT * FROM `teachers` WHERE `classes`='2' ORDER BY `id`");
    172.                         while ($t_content = mysql_fetch_array($teachers_query)) {
    173.                             $t_r = $t_content['role'];
    174.                             $t_f = $t_content['firstname'];
    175.                             $t_n = $t_content['name'];
    176.                             $t_o = $t_content['otchestvo'];
    177.                             $t_t = $t_content['text'];
    178.                             $t_i = $t_content['img'];
    179.                             echo '<div><img width="200px" src="/images/teachers_middle/'.$t_i.'.JPG" style="float: left; margin: 0 15px 25px 0;" /> <h3>'.$t_f.' '.$t_n.' '.$t_o.'</h3>'.$t_r.'<br />'.$t_t.'<br /></div><div style="clear: left;"></div>';
    180.                         }
    181.                     }
    182.                     if($page == 'teachers_young'){
    183.                         $teachers_query = mysql_query("SELECT * FROM `teachers` WHERE `classes`='1'  ORDER BY `id`");
    184.                         while ($t_content = mysql_fetch_array($teachers_query)) {
    185.                             $t_r = $t_content['role'];
    186.                             $t_f = $t_content['firstname'];
    187.                             $t_n = $t_content['name'];
    188.                             $t_o = $t_content['otchestvo'];
    189.                             $t_t = $t_content['text'];
    190.                             $t_i = $t_content['img'];
    191.                             echo '<div><img width="200px" src="/images/teachers_middle/'.$t_i.'.JPG" style="float: left; margin: 0 15px 25px 0;" /><h3>'.$t_f.' '.$t_n.' '.$t_o.'</h3>'.$t_t.'<br /></div><div style="clear: left;"></div>';
    192.                         }
    193.                     }
    194.                     if($page == 'alma_matter'){
    195.                         if(isset($number) && $number !== ''){
    196.                                 echo '<iframe src="http://docs.google.com/viewer?url=gymn2edu.ru%2Fnewspaper%2F'.$number.'.pdf&embedded=true" width="750" height="1000" style="border: none;"></iframe><br /><br />';
    197.                             }
    198.                             echo'<center><h2>Архив</h2></center>';
    199.                         $alma_query = mysql_query("SELECT * FROM `AlmaMatter` ORDER BY `id` DESC");
    200.                         while ($a_content = mysql_fetch_array($alma_query)) {
    201.                             $a_id = $a_content['id'];
    202.                             $a_n = $a_content['number'];
    203.                             $a_y = $a_content['years'];
    204.                             echo 'Alma Matter №'.$a_n.' за '.$a_y.' учебный год<a href="/newspaper/'.$a_id.'.pdf" target="_blank" download="">
    205.                             Скачать</a> или [url="index.php?page=alma_matter&number='.$a_id.'"]Читать[/url]
    206.                             <br />';
    207.                         }
    208.                         echo'<br />';
    209.                     }
    210.                                         
    211.             }
    212.             if($page=='news'){
    213.                 $news_query = mysql_query("SELECT * FROM `news` ORDER BY `id` DESC");
    214.                 while ($news_content = mysql_fetch_array($news_query)) {
    215.                     $news_name = htmlspecialchars_decode($news_content['name']);
    216.                     $content = htmlspecialchars_decode($news_content['text']);
    217.                     $date = $news_content['dat'];
    218.                     echo '<center><h2>'.$news_name.'</h1></center>';
    219.                     echo '<p id="news_content">'.$content.'</p><br />';
    220.                     echo '<b>Дата новости: '.$date.'</b><hr width="50%"/>';
    221.                 }
    222.             }
    223.             if($page=='reg'){
    224.                 if($end_reg == '1'){
    225.                     echo '<h2>Регистрация завершена!</h2>';
    226.                 }
    227.                 if(!empty($r_email) && !empty($r_firstname) && !empty($r_name) && !empty($r_login) && !empty($r_pass2) && !empty($r_pass1) && !empty($r_city) && !empty($r_school)){
    228.                     if($r_email !== '' && $r_firstname !== '' && $r_name !== '' && $r_login !== '' && $r_pass2 !== '' && $r_pass1 !== '' && $r_city !== '' && $r_school !== ''){
    229.                         $zapros1 = mysql_query("SELECT * FROM `users` WHERE `login` = '$r_login'");
    230.                                     $quest1 = mysql_fetch_array($zapros1);
    231.                                     if (!empty($quest1)) {
    232.                                         echo 'Логин используется!!<br />';
    233.                                     } else {
    234.                                         $zapros2 = mysql_query("SELECT * FROM `users` WHERE `email` = '$r_email'");
    235.                                         $quest2 = mysql_fetch_array($zapros2);
    236.                                         if (!empty($quest2)) {
    237.                                             echo 'Адрес e-mail используется!<br />';
    238.                                         } else {
    239.                                           
    240.                                                 if (preg_match('/^[a-zA-Z0-9]+$/', $r_login)) {
    241.                                                     $pass1 = md5($pass1);
    242.                                                             mysql_query("INSERT INTO `users`(`login`, `password`, `email`, `firstname`, `name`, `city`, `school`, `class`, `about`) VALUES ('$r_login', '$r_pass1', '$r_email', '$r_firstname', '$r_name', '$r_city', '$r_school', '$r_class', '$r_about')") or
    243.                                                                 die(mysql_error());
    244.                                                             $end_reg = '1';
    245.                                                             $login = $r_login;
    246.                                                             $password = $r_pass1;
    247.                                                             SetCookie('login', $login, time() +604800,  "/");
    248.                                                             SetCookie('password', $password, time() +64800, "/");
    249.                                                             echo '<h2>Регистрация завершена!</h2>';
    250.                                                 } else {
    251.                                                     echo 'В поле "Логин" допустимы только символы латиницы и знак подчеркивания"<br />';
    252.                                                 }
    253.  
    254.                         }                }
    255.                     }  
    256.                     else {
    257.                         echo '<center><h2>Регистрация</h2></center><form method="POST">
    258.                         *Логин:<input type="text" name="login_reg" value="'.$r_login.'" />
    259.                         <br />*e-mail:<input type="email" name="mail_reg" value="'.$r_email.'" /><br />
    260.                         *Пароль:<input type="password" name="pass1_reg" value="'.$r_pass1.'" /><br />
    261.                         *Повторите пароль:<input type="password" name="pass2_reg" value="'.$r_pass2.'" /><br />
    262.                         *Имя:<input type="text" name="name_reg" value="'.$r_name.'" /><br />
    263.                         *Фамилия:<input type="text" name="firstname_reg" value="'.$r_firstname.'" /><br />
    264.                         *Город:<input type="text" name="city_reg" value="'.$r_city.'" /><br />
    265.                         *Школа:<input type="text" name="school_reg" value="'.$r_school.'" /><br />
    266.                         Класс:<input type="text" name="class_reg" value="'.$r_class.'" /><br />
    267.                         О себе:<input type="text" name="about_reg" value="'.$r_about.'" /><br />
    268.                         <input type="submit" value="Зарегистрироваться" /><br />
    269.                         Поля отмеченные * обязательны для заполнения!<br />
    270.                         <b>Что-то не заполнено!</b>
    271.                         </form>';
    272.                 }  
    273.                 }
    274.                 else {
    275.                     echo '<center><h2>Регистрация</h2></center><form method="POST">*Логин:<input type="text" name="login_reg" />
    276.                     <br />*e-mail:<input type="email" name="mail_reg" /><br />
    277.                     *Пароль:<input type="password" name="pass1_reg" /><br />
    278.                     *Повторите пароль:<input type="password" name="pass2_reg" /><br />
    279.                     *Имя:<input type="text" name="name_reg" /><br />
    280.                     *Фамилия:<input type="text" name="firstname_reg" /><br />
    281.                     *Город:<input type="text" name="city_reg" /><br />
    282.                     *Школа:<input type="text" name="school_reg" /><br />
    283.                     Класс:<input type="text" name="class_reg" /><br />
    284.                     О себе:<input type="text" name="about_reg" /><br />
    285.                     <input type="submit" value="Зарегистрироваться" /><br />
    286.                     Поля отмеченные * обязательны для заполнения!
    287.                     </form>';
    288.                 }
    289.                 
    290.             }
    291.         ?>
    292.     
    293.  
    294.     </div>
    295.  
    296.  
    297. </div><div style="clear: left;" ></div><div style="clear: both;" ></div>
    298. <br /><br />                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
    299.  
    300. <div class="footer">
    301.     <center>Техподдержка: [url="mailto:paul.i.may1999@gmail.com"]paul.i.may1999@gmail.com[/url]<br />
    302.     ©Гимназия №2, 2014г</center>
    303. </div>
    304.  
    305. </body>
    306. </html>
    Добавлено спустя 1 минуту 22 секунды:
    З.Ы. Да, я извращенец и пишу все в одном файле. Ибо лень сразу раскидывать.
     
  2. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    Re: Помощь с куками

    Как обычно непонимание простых вещей происходит из-за недостатка базовых знаний о Веб. Браузер и php-скрипт ведут диалог с помощью запросов (request) и ответов (response). И в запросе и в ответе содержатся "заголовки" (header). Заголовки есть всегда, даже если ты их не указывал. Например в заголовке ответа прописано какого типа и в какой кодировке твоя страничка.

    Куки хранятся браузером. Функция setcookie() готовит специальный заголовок ответа в котором прописано что ты хочешь сохранить в браузере. По окончании работы скрипта ответ вместе с заголовками отправляется с сервера на браузер. При следующем запросе браузер отошлет свои куки назад на сервер. PHP автоматически разберёт заголовки с куками и поместит их в переменную $_COOKIE.

    То есть, setsookie НЕ сохраняет ничего в $_COOKIE. Всё несколько сложнее.

    браузер делает запрос страницы ==>
    cкрипт вызывает setcookie(), готовит заголовки и текст страницы ==>
    браузер запоминает куки, делает следующий запрос с cookie в заголовках ==>
    скрипт получает куки в переменную $_COOKIE, готовит следующий ответ
     
  3. Fell-x27

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

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Но без каких бы то ни было гарантий того, что браузер их примет и сохранит. Это важно.

    То есть, если ты отослал куки, не факт, что браузер их вернет обратно. Учитывай это, планируя логику приложения.
     
  4. riaron

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

    С нами с:
    1 окт 2014
    Сообщения:
    247
    Симпатии:
    4
    Где можно найти тему с авторизацией при помощи кук
     
  5. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Типа "запомнить меня на этом компьютере"?
     
  6. riaron

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

    С нами с:
    1 окт 2014
    Сообщения:
    247
    Симпатии:
    4
    хэш который во время авторизации сохранялся бы в файл и каждый раз куками проверялся базой данных. я правильно понял механизм проверки хеша?
     
  7. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    почти все популярные движки блогов и форумов идентифицируют пользователя через куки. качни любой и ковыряй потихоньку. это будет хорошей школой.
     
  8. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    номер в одной куке, в другой - логин+пароль+IP+agent+соль. Никогда так не делал, это просто предположение.
     
  9. Fell-x27

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

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Ты так не шути, кто-то может прямо понять, а не про хэширование.
     
  10. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    ой, да, забыл указать ключевой момент :DDDDDD
    смотрел второй фильм про пипца - финал, развязка, все дела.
     
  11. Scogzhe

    Scogzhe Зэк
    [ БАН ]

    С нами с:
    4 фев 2015
    Сообщения:
    109
    Симпатии:
    0
    Да нормально они работают:)) В браузере сохранаются на определенное время потом йокаются и все :)типа временных данных.