За последние 24 часа нас посетили 22875 программистов и 1240 роботов. Сейчас ищут 744 программиста ...

Некорректно работает авторизация.

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

Метки:
  1. AnonimS

    AnonimS Новичок

    С нами с:
    8 дек 2016
    Сообщения:
    88
    Симпатии:
    9
    Всем доброго времени суток! Сейчас пишу простенький сайт, дошел до авторизации, решил не заморачиваться, просто база с пользователями, отсылаем через ajax, обновляем страницу и записываем в переменную $_SESSION, потом сравниваем, если в сессии что-то есть выводим контект личного кабинета. Вроде все написал, проверил, все работает, на телефоне проверил, тоже работает, на другом компьютере проверил все работает, ну думаю раз на 3 машинах работает можно отсылать. Позже узнаю, что сначала 1 пользователь не может зайти, потом 2, сам проверил удаленно и действительно, не записываются данные в $_SESSION, все уже перепробовал не пишутся и все..

    Вот код, который проверяет
    PHP:
    1. <?php session_start(); if (isset($_SESSION['login']) && isset($_SESSION['id'])):?>
    2. <h2 align="center">Личные данные</h2>
    3. <?php print_r($_SESSION); ?>
    4. <?php else: ?>
    5. <div class="login" align="center"><h2>Авторизация на сайте:</h2>
    6.     <form id="formx" method="post" action="">
    7.         Логин: <input type="text" name="login" style="margin-right: -1px;"><br>
    8.         Пароль: <input type="password" name="password"><br>
    9.         <input id="submit" type="submit" name="submit" value="Войти">
    10.     </form>
    11. </div>
    12.  
    13. <?php print_r($_SESSION); ?>
    14.         <div id="rez"></div>
    15. <?php endif ?>  
    Вот обработчик
    PHP:
    1. if(isset($_POST['login']) and isset($_POST['password'])){
    2.     include('asset.php');
    3.  
    4.     if (empty($_POST['login'])) // Если поле логин пустое
    5.         {
    6.         echo '<div class="red">Поле логин не заполненно!</div>'; // То выводим сообщение об ошибке
    7.         }
    8.     elseif (empty($_POST['password'])) // Если поле пароль пустое
    9.         {
    10.         echo '<div class="red">Поле пароль не заполненно!</div>'; // То выводим сообщение об ошибке
    11.         }
    12.     else  // Иначе если все поля заполненны
    13.         {    
    14.         $login = $_POST['login']; // Присваиваем переменной значение из поля с логином            
    15.         $password = $_POST['password']; // Присваиваем другой переменной значение из поля с паролем
    16.         $loginCheckDb = $con->query("SELECT `id`, `status` FROM `users` WHERE `login` = '$login' AND `password` = '$password'") or die($con->error);
    17.         $loginCheckDbROW = $loginCheckDb->fetch_assoc();
    18.         $id_db=$loginCheckDbROW['id'];
    19.         $status=$loginCheckDbROW['status'];
    20.         if (empty($id_db)) // Если запрос к бд не возвразяет id пользователя
    21.             {
    22.             echo '<div class="red">Неверные Логин или Пароль!</div>'; // Значит такой пользователь не существует или не верен пароль
    23.             }
    24.         else // Если возвращяем id пользователя, выполняем вход под ним
    25.             {
    26.             session_start();
    27.             //$_SESSION['password'] = $password; // Заносим в сессию  пароль
    28.             $_SESSION['login'] = $login; // Заносим в сессию  логин
    29.             $_SESSION['id'] = $id_db; // Заносим в сессию  id
    30.             $_SESSION['status'] = $status;
    31.             //header('Location:  http://localhost/login');
    32.             print_r($_SESSION);
    33.             echo '<script>location.reload();</script>';
    34.             echo '<div class="gren">Вы успешно вошли в систему: '.$_SESSION['login'].'</div>'; // Выводим сообщение что пользователь авторизирован        
    35.             }    
    36.     }      
    37. }else echo '<div class="red">Ошибка отправки данных!</div>';
    Вот ajax
    Код (Javascript):
    1. $(document).ready(function(){
    2.    $('#submit').click(function(e){
    3.       e.preventDefault();
    4.       var msg = $('#formx').serialize();
    5.       $.ajax({
    6.             type: 'post',
    7.             url: 'http://localhost/assets/php/login.php',
    8.             data: msg,
    9.             success: function(data) {
    10.               $('#rez').html(data);
    11.               /*location.reload();*/
    12.             },
    13.       });
    14.    })
    15. });
    Что получается у тех, кто жалуется:
    1.Они вводят правильный логин и пароль
    2.Запрос отсылается на обработчик
    3.Возвращается строка: Вы успешно вошли в систему: Логин, который ввел пользователь
    4.Страница обновляется
    5.Проверяется условие if (isset($_SESSION['login']) && isset($_SESSION['id'])):
    6.Выводится форма авторизации, поскольку нет переменных.

    Ткните в чем проблема может быть, я уже и <?php session_start(); ?> в разные места пробовал и в самое начало, все равно тоже самое, прям какой-то парадокс, причем скачал те же браузеры, что у них, у меня все работает, а у них нет...
     
  2. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    доступ к логам есть?
     
  3. AnonimS

    AnonimS Новичок

    С нами с:
    8 дек 2016
    Сообщения:
    88
    Симпатии:
    9
    Да, в логах ни чего не нашел..
    access
    Код (Text):
    1.  
    2.  
    3. IP - - [26/Feb/2017:22:36:50 +0300] "GET /assets/image/icon-2.svg HTTP/1.1" 304 180 "http://host.ru/assets/css/style.css" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 YaBrowser/17.3.0.1785 Yowser/2.5 Safari/537.36"
    4. IP - - [26/Feb/2017:22:36:50 +0300] "GET /assets/image/icon-3.svg HTTP/1.1" 304 181 "http://host.ru/assets/css/style.css" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 YaBrowser/17.3.0.1785 Yowser/2.5 Safari/537.36"
    5. IP - - [26/Feb/2017:22:36:50 +0300] "GET /assets/image/icon-4.svg HTTP/1.1" 304 181 "http://host.ru/assets/css/style.css" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 YaBrowser/17.3.0.1785 Yowser/2.5 Safari/537.36"
    6. IP - - [26/Feb/2017:22:36:50 +0300] "GET /assets/image/icon-5.svg HTTP/1.1" 304 180 "http://host.ru/assets/css/style.css" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 YaBrowser/17.3.0.1785 Yowser/2.5 Safari/537.36"
    7. IP - - [26/Feb/2017:22:36:50 +0300] "GET /assets/image/bg.gif HTTP/1.1" 304 180 "http://host.ru/assets/css/style.css" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 YaBrowser/17.3.0.1785 Yowser/2.5 Safari/537.36"
    8. 127.0.0.1 - - [26/Feb/2017:22:36:59 +0300] "OPTIONS * HTTP/1.0" 200 126 "-" "Apache/2.4.10 (Debian) (internal dummy connection)"
    9. IP - - [26/Feb/2017:22:44:07 +0300] "POST /login HTTP/1.1" 200 3496 "http://host.ru/login" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 YaBrowser/17.3.0.1785 Yowser/2.5 Safari/537.36"
    10. IP - - [26/Feb/2017:22:44:07 +0300] "GET /assets/css/bootstrap.min.css.map HTTP/1.1" 200 3172 "-" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 YaBrowser/17.3.0.1785 Yowser/2.5 Safari/537.36"
    11. IP - - [26/Feb/2017:22:44:27 +0300] "GET /login HTTP/1.1" 200 3727 "http://host.ru/login" "Mozilla/5.0 (Windows NT 6.3; rv:36.0) Gecko/20100101 Firefox/36.04"
    12. IP - - [26/Feb/2017:22:44:54 +0300] "GET /login HTTP/1.1" 200 3727 "http://host.ru/login" "Mozilla/5.0 (Windows NT 6.3; rv:36.0) Gecko/20100101 Firefox/36.04"
    13. IP - - [26/Feb/2017:22:44:55 +0300] "GET /assets/image/fav.png HTTP/1.1" 200 1211 "http://host.ru/login" "Mozilla/5.0 (Windows NT 6.3; rv:36.0) Gecko/20100101 Firefox/36.04"
    14. IP - - [26/Feb/2017:22:45:02 +0300] "GET /login HTTP/1.1" 200 3727 "http://host.ru/login" "Mozilla/5.0 (Windows NT 6.3; rv:36.0) Gecko/20100101 Firefox/36.04"
    15. IP - - [26/Feb/2017:22:45:05 +0300] "GET /login HTTP/1.1" 200 3726 "http://host.ru/login" "Mozilla/5.0 (Windows NT 6.3; rv:36.0) Gecko/20100101 Firefox/36.04"
    16. IP - - [26/Feb/2017:22:45:06 +0300] "POST /assets/php/content.php HTTP/1.1" 200 782 "http://host.ru/login" "Mozilla/5.0 (Windows NT 6.3; rv:36.0) Gecko/20100101 Firefox/36.04"
    17. IP - - [26/Feb/2017:22:45:20 +0300] "POST /assets/php/content.php HTTP/1.1" 200 1025 "http://host.ru/login" "Mozilla/5.0 (Windows NT 6.3; rv:36.0) Gecko/20100101 Firefox/36.04"
    18. IP - - [26/Feb/2017:22:45:24 +0300] "POST /assets/php/content.php HTTP/1.1" 200 849 "http://host.ru/login" "Mozilla/5.0 (Windows NT 6.3; rv:36.0) Gecko/20100101 Firefox/36.04"
    19. IP - - [26/Feb/2017:22:45:26 +0300] "POST /assets/php/content.php HTTP/1.1" 200 1299 "http://host.ru/login" "Mozilla/5.0 (Windows NT 6.3; rv:36.0) Gecko/20100101 Firefox/36.04"
    20. IP - - [26/Feb/2017:22:45:27 +0300] "POST /assets/php/content.php HTTP/1.1" 200 1371 "http://host.ru/login" "Mozilla/5.0 (Windows NT 6.3; rv:36.0) Gecko/20100101 Firefox/36.04"
    21. IP - - [26/Feb/2017:22:45:28 +0300] "POST /assets/php/content.php HTTP/1.1" 200 839 "http://host.ru/login" "Mozilla/5.0 (Windows NT 6.3; rv:36.0) Gecko/20100101 Firefox/36.04"
    22. IP - - [26/Feb/2017:22:45:30 +0300] "POST /assets/php/content.php HTTP/1.1" 200 1124 "http://host.ru/login" "Mozilla/5.0 (Windows NT 6.3; rv:36.0) Gecko/20100101 Firefox/36.04"
    23. IP - - [26/Feb/2017:22:45:30 +0300] "POST /assets/php/content.php HTTP/1.1" 200 1170 "http://host.ru/login" "Mozilla/5.0 (Windows NT 6.3; rv:36.0) Gecko/20100101 Firefox/36.04"
    24. IP - - [26/Feb/2017:22:45:31 +0300] "POST /assets/php/content.php HTTP/1.1" 200 846 "http://host.ru/login" "Mozilla/5.0 (Windows NT 6.3; rv:36.0) Gecko/20100101 Firefox/36.04"
    25. IP - - [26/Feb/2017:22:45:32 +0300] "POST /assets/php/content.php HTTP/1.1" 200 1019 "http://host.ru/login" "Mozilla/5.0 (Windows NT 6.3; rv:36.0) Gecko/20100101 Firefox/36.04"
    26. IP - - [26/Feb/2017:22:45:33 +0300] "POST /assets/php/content.php HTTP/1.1" 200 1034 "http://host.ru/login" "Mozilla/5.0 (Windows NT 6.3; rv:36.0) Gecko/20100101 Firefox/36.04"
    27. IP - - [26/Feb/2017:22:45:34 +0300] "POST /assets/php/content.php HTTP/1.1" 200 991 "http://host.ru/login" "Mozilla/5.0 (Windows NT 6.3; rv:36.0) Gecko/20100101 Firefox/36.04"
    28. IP - - [26/Feb/2017:22:45:35 +0300] "POST /assets/php/content.php HTTP/1.1" 200 936 "http://host.ru/login" "Mozilla/5.0 (Windows NT 6.3; rv:36.0) Gecko/20100101 Firefox/36.04"
    29. IP - - [26/Feb/2017:22:45:36 +0300] "POST /assets/php/content.php HTTP/1.1" 200 957 "http://host.ru/login" "Mozilla/5.0 (Windows NT 6.3; rv:36.0) Gecko/20100101 Firefox/36.04"
    30. IP - - [26/Feb/2017:22:45:37 +0300] "POST /assets/php/content.php HTTP/1.1" 200 837 "http://host.ru/login" "Mozilla/5.0 (Windows NT 6.3; rv:36.0) Gecko/20100101 Firefox/36.04"
    31. IP - - [26/Feb/2017:22:45:38 +0300] "POST /assets/php/content.php HTTP/1.1" 200 864 "http://host.ru/login" "Mozilla/5.0 (Windows NT 6.3; rv:36.0) Gecko/20100101 Firefox/36.04"
    32. IP - - [26/Feb/2017:22:45:59 +0300] "POST /assets/php/content.php HTTP/1.1" 200 746 "http://host.ru/login" "Mozilla/5.0 (Windows NT 6.3; rv:36.0) Gecko/20100101 Firefox/36.04"
    33. IP - - [26/Feb/2017:22:46:01 +0300] "POST /assets/php/content.php HTTP/1.1" 200 923 "http://host.ru/login" "Mozilla/5.0 (Windows NT 6.3; rv:36.0) Gecko/20100101 Firefox/36.04"
    34. IP - - [26/Feb/2017:22:46:03 +0300] "GET / HTTP/1.1" 200 4503 "http://host.ru/login" "Mozilla/5.0 (Windows NT 6.3; rv:36.0) Gecko/20100101 Firefox/36.04"
    error(Последние ошибки, это я поставил session.auto_start = 1 и поменял директорию хранения сессий, может это поможет)
    Код (Text):
    1. [Sun Feb 26 22:16:17.610203 2017] [mpm_prefork:notice] [pid 1071] AH00171: Graceful restart requested, doing restart
    2. [Sun Feb 26 22:16:17.658400 2017] [alias:warn] [pid 1071] AH00671: The Alias directive in /etc/apache2/conf-enabled/phpmyadmin.conf at line 3 will probably never match because it overlaps an earlier Alias.
    3. [Sun Feb 26 22:16:17.683134 2017] [mpm_prefork:notice] [pid 1071] AH00163: Apache/2.4.10 (Debian) configured -- resuming normal operations
    4. [Sun Feb 26 22:16:17.683160 2017] [core:notice] [pid 1071] AH00094: Command line: '/usr/sbin/apache2'
    5. [Sun Feb 26 22:16:32.451864 2017] [:error] [pid 3894] [client IP:26450] PHP Notice:  A session had already been started - ignoring session_start() in /var/www/html/assets/php/login.php on line 27, referer: http://host.ru/login
    6. [Sun Feb 26 22:21:48.177831 2017] [:error] [pid 3897] [client IP:26273] PHP Notice:  A session had already been started - ignoring session_start() in /var/www/html/assets/php/login.php on line 27, referer: http://host.ru/login
    7. [Sun Feb 26 22:29:35.590111 2017] [:error] [pid 3894] [client IP:26328] PHP Notice:  A session had already been started - ignoring session_start() in /var/www/html/pages/logout.php on line 3, referer: http://host.ru/login
    8. [Sun Feb 26 22:30:11.429577 2017] [:error] [pid 3894] [client IP:26340] PHP Notice:  A session had already been started - ignoring session_start() in /var/www/html/pages/login.php on line 6, referer: http://host.ru/login
    9. [Sun Feb 26 22:45:06.649209 2017] [:error] [pid 3896] [client IP:26470] PHP Notice:  A session had already been started - ignoring session_start() in /var/www/html/pages/content/login/kab_1.php on line 2, referer: http://host.ru/login
    10. [Sun Feb 26 22:45:20.239022 2017] [:error] [pid 3895] [client IP:26472] PHP Notice:  A session had already been started - ignoring session_start() in /var/www/html/pages/content/login/kab_3.php on line 19, referer: http://host.ru/login
    11. [Sun Feb 26 22:45:38.818821 2017] [:error] [pid 3895] [client IP:26472] PHP Notice:  A session had already been started - ignoring session_start() in /var/www/html/pages/content/login/za_form.php on line 13, referer: http://host.ru/login
     
  4. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    как думаешь?)
    --- Добавлено ---
    избавься от ошибок дальше будем смотреть.
    А сфига менять директорию?
    Может туда прав нет...
    Проверяй, ответы у тебя в логах)
     
  5. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.989
    Симпатии:
    759
    1. session_start(); в обработчик в самое начало.
    2. пароль в сессии хранить не нужно
    3. полученные от пользователя строки нужно проверять хотя бы стандартными функциями
     
  6. AnonimS

    AnonimS Новичок

    С нами с:
    8 дек 2016
    Сообщения:
    88
    Симпатии:
    9
    права дал, от ошибок , да надо избавляться. А не может к примеру блокировать антивирус падения файлика куки?
    --- Добавлено ---
    Хорошо, попробую с этого начать.
     
  7. AnonimS

    AnonimS Новичок

    С нами с:
    8 дек 2016
    Сообщения:
    88
    Симпатии:
    9
    Хотя кука падает-то клиентам, в браузере и у себя и пользователя я ее вижу, но получается у меня он находит значения по ид куки, а у пользователя нет, завтра сравню, есть ли вообще на сервере эта кука со значениями, если ее нет, то проблема в том, что куда кидать ее на сервере...
     
  8. AnonimS

    AnonimS Новичок

    С нами с:
    8 дек 2016
    Сообщения:
    88
    Симпатии:
    9
    Все ошибки устранил, но проблема не ушла, но я нашел причину. Что у нас получается:
    1.Загружаю страничку с формой, стартует сессия, кидается кука на комп клиента с ID сессии и на сервер в папку session.save_path(Кстати какие у нее должны быть права, я пока поставил 777, ну это не правильно, каждый может зайти и поменять данные?) с таким же ID, все хорошо пока..
    2.Ввожу логин и пароль, нажимаю войти, стартует новая сессия с ID_2, переменные пишутся в нее в div выводиться, что все хорошо, пользователь зашел, страница обновляется и опять форма авторизации, потому что ID сессии нет переменных.
    Вопрос. Почему такое может быть? У меня 2 варианта:
    1.Надо проверять есть ли кука с ID сессии, но тогда выдается ошибка в логах, что Undefined variable: _SESSION
    2.Это настройки php.ini (возможно надо настроить время жизни сессии)
    Вот они

    PHP:
    1. [Session]
    2. session.save_handler = files
    3. session.save_path = "/var/www/html/temp"
    4. session.use_strict_mode = 0
    5. session.use_cookies = 1
    6. ;session.cookie_secure =
    7. session.use_only_cookies = 1
    8. session.name = PHPSESSID
    9. session.auto_start = 0
    10. session.cookie_lifetime = 0
    11. session.cookie_path = /
    12. session.cookie_domain =
    13. session.cookie_httponly =
    14. session.serialize_handler = php
    15. session.gc_probability = 0
    16. session.gc_divisor = 1000
    17. session.gc_maxlifetime = 1440
    18. session.referer_check =
    19. ;session.entropy_length = 32
    20. ;session.entropy_file = /dev/urandom
    21. session.cache_limiter = nocache
    22. session.cache_expire = 180
    23. session.use_trans_sid = 0
    24. session.hash_function = 0
    25. session.hash_bits_per_character = 5
    26. ame=src,input=src,form=fakeentry"
    27. url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=fakeentry"
    28. ;session.upload_progress.enabled = On
    29. ;session.upload_progress.cleanup = On
    30. ;session.upload_progress.prefix = "upload_progress_"
    31. ;session.upload_progress.name = "PHP_SESSION_UPLOAD_PROGRESS"
    32. ;session.upload_progress.freq =  "1%"
    33. ;session.upload_progress.min_freq = "1"
    34. ;session.lazy_write = On
    Ткните, что не так делаю, уже перечитал про сессии мануал, там есть что-то про механизм задваивания, но у меня там не та ситуация. Есть и про навигацию JS, ведь у меня контект подгружается динамически, соответственно там написано, что надо слать заголовки, думаю с этого дальше начну..
    Так же заметил в логах такую ошибку internal dummy connection, так и не нашел что она значит, может кто подскажет?
     
  9. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.989
    Симпатии:
    759
    сессии по умолчанию нормально должны работать.
    не надо лазить в настройки если не знаешь что делаешь и зачем тебе это нужно.
    верни всё как было.
     
  10. AnonimS

    AnonimS Новичок

    С нами с:
    8 дек 2016
    Сообщения:
    88
    Симпатии:
    9
    Понял, я поменял только путь, ну сейчас все по умолчанию вернул. Все равно задваивается..
    --- Добавлено ---
    Вот к примеру, я нажимаю войти, ajax'ом посылаю запрос, там создается куки, но они не посылаются пользователю, вот в чем проблема, думаю надо в эту сторону копать..
     
  11. Sergey_Tsarev

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

    С нами с:
    17 мар 2016
    Сообщения:
    502
    Симпатии:
    105
    А для чего у тебя первая сессия стартует? Какую информацию она содержит?
     
  12. AnonimS

    AnonimS Новичок

    С нами с:
    8 дек 2016
    Сообщения:
    88
    Симпатии:
    9
    Вроде решил проблему, путем удаления ajax'а, просто форма и action на обработчик..
    Она стартует, чтобы взять от туда переменные и проверить такого пользователя на его данные из базы. Я может не понимаю алгоритм, удали ajax и все заработало, куки пишуться именно в сессию, которая уже есть.
     
  13. Sergey_Tsarev

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

    С нами с:
    17 мар 2016
    Сообщения:
    502
    Симпатии:
    105
    Мне кажется, что это можно сделать проще. Пользователь ввёл логин и пароль и нажал кнопку "Войти", например. Ты в принимающем скрипте проверяешь есть ли такой пользователь и если есть, верный ли пароль он указал. Если все верно, то стартуешь сессию и в неё записываешь ID юзера и допустим строку сгенерированную из случайных символов. И создаёшь куки с теми же данными. Потом сравниваешь данные из куки с данными из сессии и если они одинаковые, значит пользователь авторизован для доступа в личный кабинет, например. В противном случае выкидываешь пользователя на страницу входа.