За последние 24 часа нас посетили 49017 программистов и 1805 роботов. Сейчас ищут 960 программистов ...

Cookie не сохраняются

Тема в разделе "Прочие вопросы по PHP", создана пользователем Dell, 2 май 2016.

  1. Dell

    Dell Новичок

    С нами с:
    2 май 2016
    Сообщения:
    8
    Симпатии:
    0
    Написал код, входа на сайт:
    1.На сервере создаётся страница (Адресация всегда идёт на index.php - он один на сайте).
    1.1.Определяет отправленную переменную через GET (site.com/Вход (выглядит), site.com/index.php&id=Вход (на самом деле) )
    1.2.Выполняет нужные скрипты, чтобы создать страницу и отправляет её пользователю.
    Проблемы выше нету, а вот со входом есть.
    2.После заполнения формы отправляется на страницу с авторизацией
    Сама форма:
    HTML:
    1.  
    2. <form action = "login/login.php" method="post" autocomplete="on">
    3. <tr><td>
    4.     <p><h2>Вход:</h2></p>
    5. </td></tr>
    6. <tr><td>
    7.          <p>E-mail: </p>
    8.          <input name="e-mail_login" type="text" autocomplete="on" size="30" maxlength="25" value="">
    9. </td></tr>
    10. <tr><td>
    11.         <p>Пароль: </p>
    12.         <input <?php echo "$error[1]"?> name="password" type="password" autocomplete="on" size="30" maxlength="25" value="">
    13. </td></tr>
    14. <tr><td>
    15.     <table>
    16.             <tr><td>
    17.                   <input name="submit" type="submit" value="Войти">
    18.             </td><td>
    19.                     <a href=Восстановить_пароль>Забыл пароль?</a>
    20.             </td></tr>
    21.     </table>
    22. </form>
    23.  
    Куда она отправляется ибо login.php (лежащий в /login/) исключение из п.1, адресация идёт на страницу /login/login.php, т.е. ничего другого, только страница, код которой написан ниже.
    PHP:
    1. <?php
    2.     if ($_POST['submit'] == 'Войти') {
    3.         if ($_POST['e-mail_login'] !== '' and $_POST['password'] !== '') {
    4.             $email = $_POST['e-mail'];
    5. //БД не обращайте внимания всё работает
    6.             $z = "SELECT * FROM `users` WHERE `e-mail` = '".$_POST['e-mail_login']."'"; //Создаёт запрос БД
    7.             $a = mysql_query("$z"); //Отправляет запрос БД
    8.             $b = mysql_fetch_array( $a ); //Создаёт массив $b
    9. //
    10.             if (password_verify($_POST['password'], "$b[3]")) { //$b[3] - хэш-сумма пароля
    11.                 $array = array_merge(range('A','Z'),range('a','z'),range('0','9'));
    12.                 $c = count($array);
    13.                 for($i=0;$i<24;$i++) {$key .= $array[rand(0,$c)];} //Создание ключа вроде sad93IpbMEKKl7rMBPjalVU4
    14. //БД не обращайте внимания всё работает
    15.                 $request = "update users set keylogin = '".$key."' where id = '".$b[0]."'"; //Обновляет БД: ключ
    16.                 mysql_query($request); // Отправляет этот запрос.
    17. //
    18.                 setcookie("TestCookie", $key);
    19.                 echo 'Авторизация выполнена!';
    20.                 echo "<script>location.href='../index.php'</script>";
    21.             } else {
    22.                 echo $b[3];
    23.                 $error[7] = ('<font color="red"> Неправильный логин или пароль!</font>');
    24.             };
    25.         } else {
    26.             $error[0] = ('id="user" required');
    27.             $error[1] = ('id="user" required');
    28.             $error[7] = ('<font color="red"> Заполните нужные поля!</font>');
    29.             echo "<script>location.href='Вход'</script>";
    30.         };
    31.     };
    32. ?>
    Авторизация проходит, на короткий момент пишет 'Авторизация выполнена!' и отправляет на главную, но cookie не сохраняет. Где ошибка? Сразу говорю, что не опытен и с cookie на вы. Всё остальное идет хорошо, только с cookie проблема.
     
  2. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Посмотри через fiddler как там куки ведут себя.
    Ещё в инструментах разработчика google chrome или firebug можно посмотреть как там куки ставятся или нет.
    Смотри протокол HTTP.
     
  3. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    Кука сохраняется. Только не для всего сайта, а для текущей директории. Браузер может хранить отдельные куки для каждой папки!

    В setcookie надо указать параметр path равный '/' - тогда кука будет действовать на всё.
     
  4. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
  5. Dell

    Dell Новичок

    С нами с:
    2 май 2016
    Сообщения:
    8
    Симпатии:
    0
    Благодарю всех, кто помогал, проблема была в .htaccess, загадочном для меня файле. Стал переписывать сайт без него всё работает.;)
     
  6. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    Проблема в твоём непонимании, а не в .htaccess. Сказано тебе: кука привязана к "папке". Ставь куку в корневую папку и всё будет ок.

    Сейчас ты вместо того, чтобы усвоить этот момент, просто отказался от mod_rewrite, то есть перестал использовать "виртуальные папки". Проблема не решена, а затаилась до следующего раза.
     
    mahmuzar нравится это.
  7. Dell

    Dell Новичок

    С нами с:
    2 май 2016
    Сообщения:
    8
    Симпатии:
    0
    1.Я не обвинят .htaccess, а говорил, что этот файл загадочный для меня, то есть я не знаю, как работает, его язык, не знаю как перенаправлять, как писать. Разбираться с ним у меня времени нету, поэтому решил переписать весь сайт.
    2.Также говоря от там, что ошибка была в .htaccess значит, что ошибка не в коде, он бы работал и так, а именно в этом файле. Помните об исключение, о котором я писал, так я соврал, т.к. это исключение не работало именно в .htaccess, почему не знаю.
    Вместо того, чтобы загрузить это исключение, он загружал index.php в корне, а потом и запись в cookie, но так как страница была не пуста, то cookie логично не записываются.
    Поставив cookie в корень ничего бы не случилось, так как у меня единственная доступная страница index.php и не важно, где они лежат в корне не в корне, не запустилось бы.
    Да согласен, что
    . Но мне главное написать сайт, а без .htaccess сайт не работает, а переписывать .htaccess, я не знаю как.
    Да ещё, я же говорил
    . У меня написал сайт чёрт ногу сломает и всё равно бы переписывал, я же учусь. А, что-то добавлять и изменять - это тяжело и проще переписать.
    Проблему решил следующим образом, переписал весь сайт на более "логичный" язык и приятный на глаз, без .htaccess. Теперь всё также, но без этого файла всё работает, а файлы с cookie вынес в отдельную директорию, чтобы, когда буду ставить мой любимый файл, весь этот процесс был намного для меня гибче и легче. Как говорится "Москва не сразу строилась" и мне сейчас нету смысла использовать коды, которые лучше подошли для этого, я не смогу, уже пытался - это как сразу учится решать интегралы, даже если не знаешь сложения.