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

Статус
В этой теме нельзя размещать новые ответы.

Neonion

Создатель
Регистрация
29 Сен 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(); 
} 
?>
Обновляю :
Попробовал на другом серваке - то же самое...Выбрасывает с админки для повторной авторизации, и потом закидывает на нужную страничку...
 
1. Не использовать session_register() вообще.
2. $SESSION заменить на $_SESSION.
3. Учиться, учиться и ещё раз учиться.

4. Включить отображение/логирование ошибок, если этого ещё не сделано.
 
Ну во-первых 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>");
  }
}
 
работает!) Все, можно спать ложиться:)

Добавлено через 3 минуты
Ну во-первых 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>");
  }
}

Ок, спасибо.. Попробую еще и твой вариант.
Просто код писал не я... Вот и сталкиваюсь со всякими проблемами..Чувствую что когда перелопачу этот движок, то от него ничего родного не останеться :)
Всем спасибо!
 
Ну во-первых session_start(); перенеси в самое начало файла - ничего перед ним быть не должно.
Не совсем так - перед ней ничего не должно выводиться в поток, но и с этим бороться можно.
 
Не совсем так - перед ней ничего не должно выводиться в поток, но и с этим бороться можно.
Согласен. Но зачем человека, который только начинает изучать язык, нагружать этими знаниями? Со временем оно и так придет, а пока session_start() в начале файла лучше принять, как правило красивого кодинга, которое поможет избежать кучу гемора.
Смотрящему: Два последних поста, как не относящиеся к решению проблемы спрашивающего, прошу удалить. Спасибо.
 
2. $SESSION заменить на $_SESSION.
Так а в чем разница между $SESSION и $_SESSION ?

Включить отображение/логирование ошибок, если этого ещё не сделано
Где он в денвере включаеться не подскажете?:)

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


Раз уж так пошло, то задам еще один вопрос по регистрации пользователей.
При регистрации на сайте была проблема с локалами, я вставил пхп 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.:Обещаю учиться и не задавать глупых вопросов:)!
 
Так а в чем разница между $SESSION и $_SESSION ?
$_SESSION - это системный суперглобальный массив, а $SESSION -простая переменная
Где он в денвере включаеться не подскажете?:)
создайте .htaccess с таким содержимым
Код:
php_value error_reporting 7

<IfModule mod_php4.c>
php_flag session.use_trans_sid off
</IfModule>
 
Спасибо за инфу!

Все, решил только что проблему...Капнул глубже код и получилось зарегиться и залогиниться...Правда пришлось отменить проверку на правильность введеной капчи..Но эт я подумаю как еще решить.
 
попробуй заменить if ($reg_num<>$nomer) на if ($reg_num!=$nomer)
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху