Вроде как проблема с сесиями. Что делать?

Тема в разделе "PHP", создана пользователем Neonion, 6 окт 2008.

Статус темы:
Закрыта.
Модераторы: latteo
  1. Neonion

    Neonion Создатель

    Регистр.:
    30 сен 2008
    Сообщения:
    26
    Симпатии:
    0
    Народ, искал-искал, но не нашел нужной информации.. Вообщем перехожу сразу к делу.

    Есть движок, на котором я делаю сейчас сайт. Движок простой как 5 пальцев на одной руке:) На локале все работает : и регистрация проходит пользователей, и в админку нормально заходит...
    На локале у меня стоит хрюша и виста. Есть еще линукс, но под ним не пробовал.
    Пользуюсь пакетом Денвер.

    Сегодня решил перенести сайт на хост и начинать потихоньку настраивать его там. Когда поставил проявился первый косяк : не заходит в админку, не регяться пользователи, ну а с самого начала просто не хотел ставиться. Странички при любом запросе связаным с заполнением форм просо тупо обновлялись и ничего не происходило.
    Я вспомнил что когда-то у меня был горький опыт со скриптом с локальными переменными и прописал в нужных пхп-файлах такие строки :
    extract($_GET);
    extract($_POST);
    Это дало возможность обойти проблему с локалами...Покрайней мере мне так когда-то посоветовал один админ с хостинга...
    Но вылезла другая проблема, которую я уже не могу решить часа 3. Бьюсь головой... В админку заходит, но когда я хочу перейти на другой пункт меню панели администратора, то меня сначала выкидывает на страничку авторизации, а потом(когда я опять введу логин и пароль) кидает на нужную мне страничку панели.
    Такое впечатление что несохраняються сессии... Хост на мирохосте. Не могу понять почему на локале пашет, а на хосте в инете нет... Кто сможет мне решить проблему? Очень надо...
    P.S.: прилагаю код пхп-файла с авторизацией
    Код:
    <?
    extract($_GET);
    extract($_POST);
    error_reporting(0);
    include ("../setup.php");
    $resultg=mysql_query("select * from seting ");
    $rog=mysql_fetch_array($resultg);
    $Users = array($rog[0] => $rog[1]);
    session_start();
    session_register("SESSION");
    if (! isset($SESSION)) {
    $SESSION = array();
    }
    if($event=='exit') {
    unset ($SESSION["password"]);
    unset ($SESSION["username"]);
    }
    if($enter) { 
    $SESSION["username"] = $user;
    $SESSION["password"] = $passw;
    } 
    $username = $SESSION["username"];
    $password = $SESSION["password"];
    $dd = array_search($password, $Users);
    
    ?>
    <style type=text/css>
    input { FONT-FAMILY: MS Sans Serif; FONT-SIZE: 10px; }
    select { FONT-FAMILY: MS Sans Serif; FONT-SIZE: 10px; }
    a:hover { color: #86869B }
    a:visited { color: navy }
    a { color: navy }
    a:active { color: #ff0000 }
    body { FONT-FAMILY: Times New Roman; FONT-SIZE: 13pt; COLOR: #1F1F1F; }
    </style>
    <? if (empty($password) or $dd !== $username) { ?>
    
    <p><br>
    </p>
    <table border="1" align="center">
         <tr>
        
                <p align="center"><font face="Verdana"><img border="0" src="../img/registr.GIF"></font></p>
           
                
            </td>
        </tr>
    </table>
    <p>
    </p>
    <center>
    
        <form action="<?=$PHP_SELF?>" method="post">
            <p>&nbsp;</p>
                   <h3 style="color:green"><font face="Verdana" color="#FF0033">&nbsp; Вход для администратора</font><font face="Verdana" color="maroon"></font><font face="Verdana"></font></h3>
            <table align="center" border="0" height="124">
                <tr>
                    <td align="center" colspan="2">&nbsp;</td>
                </tr>
                <tr>
                    <td align="right"><font face="Verdana">Логин:</font></td>
                    <td><font face="Verdana"><input type="text" name="user" size="22"></font></td>
                </tr>
                <tr>
                    <td align="right"><font face="Verdana">Пароль:</font></td>
                    <td><font face="Verdana"><input type="password" name="passw" size="22"></font></td>
                </tr>
                <tr>
                    <td align="right"></td>
                    <td><font face="Verdana"><input type="submit" value="Войти" name="enter">
    		</font>
    
                    </td>
                </tr>
                <tr>
                    <td align="right" colspan="2">
    </td>
                </tr>
            </table>
        </form>
        <? 
    die(); 
    } 
    ?>
    Обновляю :
    Попробовал на другом серваке - то же самое...Выбрасывает с админки для повторной авторизации, и потом закидывает на нужную страничку...
     
  2. PHP_Master

    PHP_Master

    Регистр.:
    3 фев 2008
    Сообщения:
    2.647
    Симпатии:
    591
    1. Не использовать session_register() вообще.
    2. $SESSION заменить на $_SESSION.
    3. Учиться, учиться и ещё раз учиться.

    4. Включить отображение/логирование ошибок, если этого ещё не сделано.
     
    Neonion нравится это.
  3. megadude

    megadude

    Регистр.:
    6 сен 2006
    Сообщения:
    184
    Симпатии:
    66
    Ну во-первых session_start(); перенеси в самое начало файла - ничего перед ним быть не должно.
    Во-вторых вместо $SESSION пропиши $_SESSION.
    И вообще, код у тебя слегка грязный и непонятно кто что и зачем делает.
    Обычная(очень упрощенная) авторизация:
    PHP:
    # If data submitted 
    if ($_POST['submit'] && $_POST['username']!="" && $_POST['password']!="") {
      
    $username mysql_real_escape_string($_POST['username']);
      
    $password mysql_real_escape_string($_POST['password']);

    # Selecting records from DB
      
    $query mysql_query ("SELECT * FROM `table` WHERE `username`='$username' and `password`='$password' ");
      
    $valid mysql_fetch_row($query);

    # If login data correct
      
    if ($valid 0) {
        
    $_SESSION['user'] = $username;
      } 
    # If login data NOT correct
      
    else { 
        echo (
    "<b>Wrong username or password!</b>");
      }
    }
     
  4. Neonion

    Neonion Создатель

    Регистр.:
    30 сен 2008
    Сообщения:
    26
    Симпатии:
    0
    работает!) Все, можно спать ложиться:)

    Добавлено через 3 минуты
    Ок, спасибо.. Попробую еще и твой вариант.
    Просто код писал не я... Вот и сталкиваюсь со всякими проблемами..Чувствую что когда перелопачу этот движок, то от него ничего родного не останеться :)
    Всем спасибо!
     
  5. PHP_Master

    PHP_Master

    Регистр.:
    3 фев 2008
    Сообщения:
    2.647
    Симпатии:
    591
    Не совсем так - перед ней ничего не должно выводиться в поток, но и с этим бороться можно.
     
  6. megadude

    megadude

    Регистр.:
    6 сен 2006
    Сообщения:
    184
    Симпатии:
    66
    Согласен. Но зачем человека, который только начинает изучать язык, нагружать этими знаниями? Со временем оно и так придет, а пока session_start() в начале файла лучше принять, как правило красивого кодинга, которое поможет избежать кучу гемора.
    Смотрящему: Два последних поста, как не относящиеся к решению проблемы спрашивающего, прошу удалить. Спасибо.
     
  7. Neonion

    Neonion Создатель

    Регистр.:
    30 сен 2008
    Сообщения:
    26
    Симпатии:
    0
    Так а в чем разница между $SESSION и $_SESSION ?

    Где он в денвере включаеться не подскажете?:)

    Какой толковый учебник в электронном виде посоветуете? Чтобы не совсем уж для чайников, но и чтобы понятно как для новичка было написано(наверное мечта;)) ?


    Раз уж так пошло, то задам еще один вопрос по регистрации пользователей.
    При регистрации на сайте была проблема с локалами, я вставил пхп extract($_GET);
    extract($_POST); и все пошло, но начало выскакивать окно типа "неправильно ввели регистрационный код". Это капча там есть. И кидает обратно на страницу регистрации.
    Пока не могу найти решение этой проблемы.... Она в принципе последняя из нерешаемых мною..Все остальное вроде осилил уже)
    Код регистрации таков :
    Код:
    <?
    extract($_GET);
    extract($_POST);
    }
    else
    {echo "<script> alert('Вы уже авторизированны !'); document.location.href='index.php'; </script>";}
    }
    
    if($send=="1"){
    
    if ($r_login=="" or $r_pass=="" or $r_email=="" )
    {
    echo "<script> alert('Пожалуйста заполните все поля!'); document.location.href='?pg=reg'; </script>";
    exit;
    }
    
    if ($reg_num<>$nomer) {echo "<script> alert('Введите число, указанное на картинке!'); document.location.href='?pg=reg'; </script>"; exit;}
    if(!preg_match("/^([a-z,0-9])+\@([a-z,0-9])+(\.([a-z,0-9])+)+$/", $r_email))
    {echo "<script> alert('Неправильный E-mail!'); document.location.href='?pg=reg'; </script>";
     exit;
     }
    
    
    //include ("setup.php");
    //$date=date("d.m.y");
    
    $sqlr="select * from users where login='$r_login'";
    $resultr=mysql_query($sqlr);
    $rowr=mysql_fetch_array($resultr);
    
    if ($r_login==$rowr[1])
    {
    echo "<script> alert('Игрок с таким логином существует!'); document.location.href='?pg=reg'; </script>";
    exit;
    }
    $pus=$HTTP_COOKIE_VARS["par"];
    $sqlru="select * from users where login='$pus'";
    $resultru=mysql_query($sqlru);
    $rowru=mysql_fetch_array($resultru);
    if ($pus==$rowru[1] && $pus<>"")
    {
    $sqlp="INSERT INTO partner VALUES('$pus','$r_login','$date','0.00')";
    mysql_query($sqlp);
    }
    
    
    $sqlr="INSERT INTO users VALUES(NULL,'$r_login','$r_pass','0.00','0.00','0.00','$r_email','$r_name','$r_fam','$date','0','0.00','0.00','0.00','0.00','0.00','0.00','0','0','$r_wmid','$r_koshr','$r_koshz','$r_koshe','$r_icq')";
    mysql_query($sqlr);
    
    
    include("mail/reg.php");
    $to =$r_email;
    $subject = $reg_reg_mail_subject;
    $msg =$reg_reg_mail;
    $mailheaders = "Content-Type: text/plain; charset=Windows-1251\n";
    $mailheaders .= "From: $con[2]\n";
    mail($to, $subject, $msg, $mailheaders);
    
    $con=mysql_fetch_array(mysql_query("select * from seting"));
    if ($con[regmail]=="yes"){
    include("mail/newreg.php");
    $to =$con['adm_email'];
    $subject = $reg_reg_mail_subject;
    $msg =$reg_reg_mail;
    $mailheaders = "Content-Type: text/plain; charset=Windows-1251\n";
    $mailheaders .= "From: $con[adm_email]\n";
    mail($to, $subject, $msg, $mailheaders);
    }
    
    unset($pus);
    session_destroy();
    ?>
    <b><font color="#990000">Вы зарегистрированы.</font></b>
    
    <br><br>
    Для начала игры , войдите в игровой зал введя ваш логин и пароль.<br><br>
    На ваш Email были отправленны ваши данные.</p>
    <p>
    
    
    Желаем Удачи!</p>
    
    <p>&nbsp;</p>
    
    <?
    }
    
    ?>
    
    P.S.:Обещаю учиться и не задавать глупых вопросов:)!
     
  8. Liver

    Liver

    Регистр.:
    24 сен 2008
    Сообщения:
    316
    Симпатии:
    91
    $_SESSION - это системный суперглобальный массив, а $SESSION -простая переменная
    создайте .htaccess с таким содержимым
    Код:
    php_value error_reporting 7
    
    <IfModule mod_php4.c>
    php_flag session.use_trans_sid off
    </IfModule>
     
    Neonion нравится это.
  9. Neonion

    Neonion Создатель

    Регистр.:
    30 сен 2008
    Сообщения:
    26
    Симпатии:
    0
    Спасибо за инфу!

    Все, решил только что проблему...Капнул глубже код и получилось зарегиться и залогиниться...Правда пришлось отменить проверку на правильность введеной капчи..Но эт я подумаю как еще решить.
     
  10. -=Xardas=-

    -=Xardas=-

    Регистр.:
    17 сен 2008
    Сообщения:
    250
    Симпатии:
    58
    попробуй заменить if ($reg_num<>$nomer) на if ($reg_num!=$nomer)
     
    Neonion нравится это.
Статус темы:
Закрыта.