За последние 24 часа нас посетили 74243 программиста и 10177 роботов. Сейчас ищут 3106 программистов ...

Непонятные ошибки при авторизации посредством сессий

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

  1. igmar

    igmar Новичок

    С нами с:
    5 ноя 2015
    Сообщения:
    39
    Симпатии:
    0
    Опыта в php и серверной части нет. Есть Денвер. Не могу разобраться с авторизацией при помощи сессий. Непонятные ошибки при работе скрипта.
    index.php - должен показывать успешную авторизацию. Не показывает.
    Код (PHP):
    1. <?php
    2. if ($authorize!=1) die("Несанкционированный доступ");
    3. ?>
    4. <html><body>
    5. Авторизация успешная
    6. </body></html>
    auth1.html - форма авторизации. Работает.
    Код (PHP):
    1. <html><body>
    2. <form action=enter.php>
    3. Логин: <input name=login type=text><br>
    4. Пароль: <input name=pass type=text><br>
    5. <input type=submit value="Войти">
    6. </form>
    7. </body></html>
    8.  
    enter.php - скрипт обрабатывающий данные формы, который должен устанавливать значение сессии. Работает наполовину.
    Код (PHP):
    1. <?php
    2. $login=@$_GET['login'];
    3. $pass=@$_GET['pass'];
    4. $result=0;
    5. foreach (file('User.dat',FILE_IGNORE_NEW_LINES) as $k) {
    6.     if($k==$login."-".$pass) {
    7.        $result=1;
    8.        echo "res=true"."<br>";
    9.        break;
    10.     }
    11. }
    12. if ($result!=1) die("Несанкционированный доступ");
    13. session_register("authorize");
    14. $authorize=1;
    15. ?>
    user.dat - "база" логинов
    Код (PHP):
    1. Login1-Login11
    2. Login2-Login12
    Проблема. Когда ввожу в форму Login1 Login11, то скрипт успешно проверяет их и выдает res=true
    Но после этого пишет
    Я это не понимаю. Какие заголовки куда уже отосланы и как это все привести в рабочее состояние?

    Подсказка от модератора:
    Любой код или текст конфигурации пишите между тегом [code=php] и [/code].
    Используйте отступы в коде для форматирования текста.
    Это помогает быстрее понять вас, увеличивает шанс на получение ответа.
    Что выделать? Например: PHP, HTML, CSS, JavaScript, SQL, XML, .htaccess, ini, регулярные выражения, код шаблонизаторов, результаты array/object dump и т.д.
     
  2. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.129
    Симпатии:
    1.225
    Адрес:
    там-сям
  3. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    Код (PHP):
    должно быть до HTML кода, до вообще какого-нибудь вывода текста в браузер.

    избавься от денвера, используй OpenServer.
     
  4. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.129
    Симпатии:
    1.225
    Адрес:
    там-сям
    Закрывать ?> в конце php-файла сейчас не рекомендуется!. Ну и следи нет ли у тебя пустой строки/пробела/BOM перед первым <?php
    Ну и если у тебя уже случился какой-то вывод ошибки перед header или session_start, то эта ошибка уже будет следствием первой.
     
  5. igmar

    igmar Новичок

    С нами с:
    5 ноя 2015
    Сообщения:
    39
    Симпатии:
    0
    С первым предупреждения я разобрался. Да, не надо было выводить ничего.
    А устаревшая функция session_register(), какую нужно использовать вместо ее?
     
  6. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.129
    Симпатии:
    1.225
    Адрес:
    там-сям
    Никакую.
     
  7. igmar

    igmar Новичок

    С нами с:
    5 ноя 2015
    Сообщения:
    39
    Симпатии:
    0
    А как же добавить в сессию какую-нибудь переменную со значением?
     
  8. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    ты читать умеешь или где?
     
  9. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.129
    Симпатии:
    1.225
    Адрес:
    там-сям
  10. igmar

    igmar Новичок

    С нами с:
    5 ноя 2015
    Сообщения:
    39
    Симпатии:
    0
    artoodetoo, спасибо! Теперь разберусь.

    VLK, да, пока я не знаю что читать. Нашел пример в инете, чел пишет - так делать, так я и пытаюсь делать.
     
  11. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    это уже я не так понял, получается ты про $_SESSSION не знал.
     
  12. igmar

    igmar Новичок

    С нами с:
    5 ноя 2015
    Сообщения:
    39
    Симпатии:
    0
    Все равно не работает. Я поправил enter.php
    Код (PHP):
    1. <?php
    2. $login=@$_GET['login'];
    3. $pass=@$_GET['pass'];
    4. $result=0;
    5. foreach (file('User.dat',FILE_IGNORE_NEW_LINES) as $k) {
    6.     if($k==$login."-".$pass) {
    7.        $result=1;
    8.        break;
    9.     }
    10. }
    11. if ($result!=1) die("Несанкционированный доступ");
    12. if (!isset($_SESSION['authorize'])) {
    13.   $_SESSION['authorize'] = 1;
    14. }
    15.  
    Ошибок не выдает. Но index.php говорит: "Несанкционированный доступ"

    Подсказка от модератора:
    Любой код или текст конфигурации пишите между тегом [code=php] и [/code].
    Используйте отступы в коде для форматирования текста.
    Это помогает быстрее понять вас, увеличивает шанс на получение ответа.
    Что выделать? Например: PHP, HTML, CSS, JavaScript, SQL, XML, .htaccess, ini, регулярные выражения, код шаблонизаторов, результаты array/object dump и т.д.
     
  13. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.129
    Симпатии:
    1.225
    Адрес:
    там-сям
    ты ждешь, что мы за тебя поотлаживаем? )))
    http://phpfaq.ru/debug
    нет, ты сам всё найдешь. как большой.
     
  14. igmar

    igmar Новичок

    С нами с:
    5 ноя 2015
    Сообщения:
    39
    Симпатии:
    0
    Спасибо. Нашел. В index.php переменная осталась со старого варианта, я ее не заменил на $_SESSION['authorize']

    Подскажите по документации. Там есть такая непонятная строчка:
    "I have wrote this following piece of code that shows how to work with global sessions (global to all clients) and private sessions (private per browser instance i.e. session cookie)."
    session_name('Global'); - если так задавать сессию, то значения переменной будут доступны из любых броузеров в любое время, пока сессия не будет принудительно закрыта session_write_close(); ?
    session_name('Private'); - а так переменная будет существовать только до закрытия этого экземпляра броузера?
    А как же тогда это согласовывается с
    "Сессия обычно завершает свою работу, когда PHP заканчивает исполнять скрипт, но может быть завершена и вручную с помощью функции session_write_close()." Или это значит, что сессия завершается, но переменные в ней сохраняются?
    А клиент для сервера - это броузер со всеми вкладками, или каждая вкладка (окно) - это отдельный клиент?
     
  15. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    чувак включай сессию в самом начале, т.е.:
    Код (PHP):
    1. <?php
    как то так