За последние 24 часа нас посетили 18454 программиста и 1607 роботов. Сейчас ищут 914 программистов ...

Не создаются COOKIES

Тема в разделе "PHP для новичков", создана пользователем slavagoreev, 5 фев 2013.

  1. slavagoreev

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

    С нами с:
    3 фев 2013
    Сообщения:
    34
    Симпатии:
    0
    Проблема заключается в том, что при отправке из формы авторизации на файл - обработчик не создаются куки. Как я сам выяснил - проблема в том что перед созданием их проходят какие-то манипуляции с базами или что-то подобное. Если поместить занос куков в начало страницы, то все работает. Вот код:
    registration.php

    Код (Text):
    1. <form action="save_user.php" method="post" enctype="multipart/form-data">
    2.       <h2 align="center">Регистрация</h2><hr /><br />
    3.       <p><input style="float:left;" name="login" type="text"  maxlength="25" placeholder="Логин"></p>
    4.       <p><input style="margin-left:40px;" name="email" type="email"  maxlength="40" placeholder="Почтовый адрес"></p>
    5.       <p><input style="float:left;" name="password" type="password"  maxlength="15" placeholder="Пароль"></p>
    6.       <p><input  style="margin-left:40px;" name="password2" type="password"  maxlength="15" placeholder="Повтор пароля">
    7.       <p><label>Выберите аватар (Не обязательно)<br></label>
    8.       <input type="FILE" name="fupload"></p>
    9. <div id="button"><input type="submit" name="submit" value="ЗАРЕГЕСТРИРОВАТЬСЯ"></div>      
    10. </form>
    save_user.php

    Код (Text):
    1. <?php
    2. if (isset($_POST['login'])) { $login = $_POST['login']; if ($login == '') { unset($login);} }
    3. if (isset($_POST['password'])) { $password=$_POST['password']; if ($password =='') { unset($password);} }
    4. if (empty($login) or empty($password)) {
    5.      exit ("Вы ввели не всю информацию, вернитесь назад и заполните все поля!");
    6. }
    7. $login = stripslashes($login);
    8. $login = htmlspecialchars($login);
    9. $password = stripslashes($password);
    10. $password = htmlspecialchars($password);
    11. $login = trim($login);
    12. $password = trim($password);
    13.  
    14. include ("connect.php");
    15. $ip=getenv("HTTP_X_FORWARDED_FOR");
    16. if (empty($ip) || $ip=='unknown') {
    17.      $ip=getenv("REMOTE_ADDR");
    18. }
    19. mysql_query ("DELETE FROM wrong WHERE UNIX_TIMESTAMP() - UNIX_TIMESTAMP(date) > 900");
    20. $result = mysql_query("SELECT col FROM wrong WHERE ip='$ip'",$db);
    21. $myrow = mysql_fetch_array($result);
    22.  
    23. if ($myrow['col'] > 2) {
    24.      exit("Вы набрали логин или пароль неверно 3 раза. Подождите 15 минут до следующей попытки.");
    25. }
    26. $login    = md5($login);
    27. $login    = strrev($login);
    28. $login    = $login."*******";
    29.  
    30. $password    = md5($password);
    31. $password    = strrev($password);
    32. $password    = $password."*******";
    33.  
    34. $result123 = mysql_query("SELECT * FROM users WHERE login='$login' AND password='$password' AND activation='1'",$db);
    35. $myrow123 = mysql_fetch_array($result123);
    36. if (empty($myrow123['login'])){
    37.      $select = mysql_query ("SELECT ip FROM wrong WHERE ip='$ip'");
    38.      $tmp = mysql_fetch_row ($select);
    39.      if ($ip == $tmp[0]) {
    40.           $result52 = mysql_query("SELECT col FROM wrong WHERE ip='$ip'",$db);
    41.           $myrow52 = mysql_fetch_array($result52);
    42.           $col = $myrow52[0] + 1;
    43.           mysql_query ("UPDATE wrong SET col=$col,date=NOW() WHERE ip='$ip'");
    44.       }
    45.      else {
    46.           mysql_query ("INSERT INTO wrong (ip,date,col) VALUES ('$ip',NOW(),'1')");
    47.      }
    48. exit ("Извините, введённый вами логин или пароль неверный.");
    49. }
    50. else {
    51.      $_SESSION['password']=$password;
    52.      $_SESSION['login']=$login;
    53.      $_SESSION['id']=$myrow123['id'];
    54.      if ($_POST['save'] = "1"){
    55.           setcookie("login", $login, time()+9999999);
    56.           setcookie("password", $password, time()+9999999);
    57.           setcookie("id", $myrow123['id'], time()+9999999);
    58.      }
    59. }
    60. ?>
    Простите, если не правельно описал ситуацию. Cookies работают,
    допутим если setcookie("login", $_POST["login"], time()+9999999); поместить в начало (случай 1), то он занесётся.
    Случай 1
    <?php
    session_start();
    define( '_JEXEC', 1 );
    if ($_POST['save'] == "1"){
    setcookie("save", $_POST['save'], time()+9999999);
    setcookie("login", $_POST["login"], time()+9999999);
    setcookie("password", $_POST["password"], time()+9999999);
    }

    include ("connect.php");
    if (isset($_COOKIE['login']) and isset($_COOKIE['password'])){
    $_SESSION['password'] = strrev (md5($_COOKIE['password']))."hrma4j";
    $_SESSION['login'] = strrev (md5($_COOKIE['login']))."f9ksb5";
    $_SESSION['id']=$_COOKIE['id'];
    }
    if (!empty($_SESSION['login']) and !empty($_SESSION['password'])){
    $login = $_SESSION['login'];
    $password = $_SESSION['password'];
    $result = mysql_query("SELECT id,avatar FROM users WHERE login='$login' AND password='$password' AND activation='1'",$db);
    $myrow = mysql_fetch_array($result);
    }
    $page = mysql_query("SELECT * FROM settings WHERE page='auth'",$db);
    $settings = mysql_fetch_array($page);
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    Но если втавить после include ("connect.php"); , то не заносятся, но ведь надо же шифровать пароль и еще и узнавать id пользователя и другое прежде чем заносить в куки!!!
    В начало текста вставлять не вариант, в начале топика есть пример обработчика и пример формы регистрации опираясь на них можете подсказать как решить данную проблему!!!
     
  2. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    как дебажили? что в журналах?
     
  3. Tokha

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

    С нами с:
    29 янв 2013
    Сообщения:
    77
    Симпатии:
    0
    Для объективности следует устранить, по крайней мере, первое из противоречий:
    1.
    противоречит
    Или имелось в виду "Все рОвно! Не работает.", тогда вопрос снимается.
    2. "Регистрация" противоречит "ЗАРЕГЕСТРИРОВАТЬСЯ" (могу предположить, что это два разных действия, так как названия у них разные)

    А вообще, посмотреть надо приходят ли куки в браузер? Можно сделать это, например Firefox'ом, Chrome тоже умеет.
     
  4. slavagoreev

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

    С нами с:
    3 фев 2013
    Сообщения:
    34
    Симпатии:
    0
    Ну я в описании написал, что пытался впересатвить занос куков в начало, помогло, но им там не место - иначе пароль будет не зашифрован!
    Сорри за ламерский вопрос, можешь подсказать как их смотреть и какой прогой.
     
  5. Tokha

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

    С нами с:
    29 янв 2013
    Сообщения:
    77
    Симпатии:
    0
    А что в "connect.php"?
    И как именно Вы определяете, работают куки или нет?
     
  6. slavagoreev

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

    С нами с:
    3 фев 2013
    Сообщения:
    34
    Симпатии:
    0
    Куки работают, вы читайте
    Надо понять как занести куки только после шифровки пароля и получения значения id пользователя
     
  7. Tokha

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

    С нами с:
    29 янв 2013
    Сообщения:
    77
    Симпатии:
    0
    slavagoreev
    Если Вы хотите, чтоб Вам помогли, потрудитесь, для начала, научиться отвечать на вопросы, которые Вам задают, заметьте - не из праздного любопытства. 5 часов времени могут стоить больших денег, которых с Вас не просят.

    У Вас есть готовые предложения на этот счет? Или это надо лично мне?

    Добавлено спустя 1 минуту 51 секунду:
    1. А что в "connect.php"?

    2. И как именно Вы определяете, работают куки или нет?