За последние 24 часа нас посетили 16628 программистов и 1594 робота. Сейчас ищет 1631 программист ...

Сесии в разных браузерах

Тема в разделе "PHP для новичков", создана пользователем padovan, 27 ноя 2009.

  1. padovan

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

    С нами с:
    30 окт 2009
    Сообщения:
    13
    Симпатии:
    0
    Здравствуйте уважаемые знатоки.

    Я написал скрипт авторизации:

    index.php

    PHP:
    1. <?php
    2.  
    3.  
    4. if (!isset($_SESSION['login']))
    5. {
    6.   header("Location: login.php");
    7. }
    8.  
    9. echo($_SESSION['login']."<br />");
    10. echo("<a href='login.php?action=logout'>Logout</a>");
    11.  
    12. ?>
    login.php

    PHP:
    1. <?php
    2.  
    3. @session_start(); //initialize session mechanism
    4.  
    5. if (isset($_GET['action']))
    6. {
    7.   if ($_GET['action']=="login")
    8.   {
    9.     if (($_POST['login']=="v")&&($_POST['pass']=="1"))
    10.     {
    11.       $_SESSION['login']=$_POST['login'];    //set login & pass
    12.       $_SESSION['pass']=$_POST['pass'];
    13.       header("Location: index.php");    // redirect him to protected.php
    14.     }
    15.   }
    16.   if ($_GET['action']=="logout")
    17.   {
    18.     session_unset();
    19.   }
    20. }
    21. ?>
    22.  
    23.     <html>
    24.     <head>
    25.     <title>Authorization page</title>
    26.     </head>
    27.     <body>
    28.     <table width='100%' height='100%'>
    29.     <form method='POST' action='login.php?action=login'>
    30.     <tr><td align=center>
    31.     <table>
    32.     <tr><td>
    33.     <table>
    34.     <tr><td>Login:</td><td><input type='text'
    35.         name='login' size='15'></td></tr>
    36.     <tr><td>Password:</td><td><input
    37.         type='password' name='pass' size='15'></td></tr>
    38.     </table>
    39.     </td></tr>
    40.     <tr><td align=center><input type='submit' name='ok'
    41.         value='Enter'></td></tr>
    42.     </table>
    43.     </td></tr>
    44.     </form>
    45.     </table>
    46.     </body>
    47.     </html>
    Вапрос: Подскажите почему в Internet Explorer скрипт работает правильно (авторизация проходит), а в Opera нет?[/php]

    Неработает - это значит что при вводе логина "v" и пароля "1" я снова попадаю на форму входа.
     
  2. amen

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

    С нами с:
    18 сен 2009
    Сообщения:
    298
    Симпатии:
    0
    Адрес:
    Узбекистан
    Лучше сделать просто

    HTML:
    1. <form method='POST' action='login.php'>
    и потом делать проверку

    if (isset($_POST['ok']))


    А так гет-параметр можно легко подменить
     
  3. padovan

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

    С нами с:
    30 окт 2009
    Сообщения:
    13
    Симпатии:
    0
    Я вот чото непонял разницы. Гет пускай меняют сколько влезет. самое главное чтоб логин и пароль был правельный.

    Или я не правильно думаю?

    И еще вопросик: $_SESSION['pass']=$_POST['pass']; - это не глупо? (хранить пароль в сессии)
     
  4. DarkElf

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

    С нами с:
    22 окт 2006
    Сообщения:
    1.632
    Симпатии:
    0
    amen
    все, что приходит с клиента, легко подменить. просто гет-параметры подменить очень легко))
     
  5. N!k0

    N!k0 Активный пользователь

    С нами с:
    9 июн 2009
    Сообщения:
    10
    Симпатии:
    0
    после header поставь выход exit() или die() иначе хоть и перенапровление есть, но скрипт продолжает работать дальше, а дальше по коду сессии идут.

    Вообще на сайте куча готовых решений по вопросу авторизации... а такая авторизация не годится.
     
  6. amen

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

    С нами с:
    18 сен 2009
    Сообщения:
    298
    Симпатии:
    0
    Адрес:
    Узбекистан
    padovan, пароль в сессии хранить крайне нежелательно. Тем более что в вашем примере его вообще хранить не нужно). Логин тоже наверно не стОит. Я предлагаю после проверки на правильность заводить переменную и её записывать в сессию.

    А тот вариант я предложил, т.к. мне показалось, что проблемы возникли именно из-за этого action=login. По-моему дело не в сессиях. В любом случае лучше сделать без action=login.

    DarkElf, лучше выбрать меньшее из зол)
     
  7. padovan

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

    С нами с:
    30 окт 2009
    Сообщения:
    13
    Симпатии:
    0
    Разобрался. )

    Посмотрел файл сессии создается нормально. А вот почему-то в опере для сайта localhost настроено было - не принимать коки. Разрешаю куки и все начинает работать. Если я правильно понял, то это не дает возможность записать ID сессии.

    Всем спасибо за советы.