Эта страница перенаправляется неправильно

#php #session #redirect #login

#php #сессия #перенаправление #аутентификация

Вопрос:

Я использовал следующий скрипт из about.com:http://php.about.com/od/finishedphp1/ss/php_login_code_2.htm

Проблема в том, что несколько раз это выдает мне эту ошибку: страница перенаправляется неправильно. Firefox обнаружил, что сервер перенаправляет запрос на этот адрес таким образом, что он никогда не завершится. Код:

 <?php

session_start(); 



// Process the POST variables
$username = $_SESSION["user_name"];
//$password = $_POST["password"];


    // Set up the session variables
     $_SESSION["user_name"] = $username;

       $ugh = $_REQUEST['url_name'];

          if($_POST){
           $_SESSION['user_name']=$_POST["user_name"];
          $_SESSION['password']=$_POST["password"];  
           }



              $secret = $info['password'];

            //Checks if there is a login cookie

            if(isset($_COOKIE['ID_my_site']))


             //if there is, it logs you in and directes you to the members page

                { 
           $username = $_COOKIE['ID_my_site']; 

            $pass = $_COOKIE['Key_my_site'];

    $check = mysql_query("SELECT user_name, password 
            FROM users WHERE user_name = '$username' 
            and url_name='$ugh'")or die(mysql_error());

          while($info = mysql_fetch_array( $check )) 



          {

               if (@ $info['password'] != $pass) 
                {

                    }

                  else

                 {

                  header("Location: home.php");



                  }

                     }

                     }


       //if the login form is submitted 

      if (isset($_POST['submit'])) { // if form has been submitted



         // makes sure they filled it in

             if(!$_POST['user_name'] | !$_POST['password']) {

    die('You did not fill in a required field.');

       }

// checks it against the database



if (!get_magic_quotes_gpc()) {

    $_POST['user_name'] = addslashes($_POST['user_name']);


}

$check = mysql_query("SELECT user_name,password 
    FROM users WHERE user_name = '".$_POST['user_name']."' 
    and url_name='".$ugh."'")or die(mysql_error());



         //Gives error if user dosen't exist

          $check2 = mysql_num_rows($check);

         if ($check2 == 0) {

           die('That user does not exist in our database. 
          <a href=add.php>Click Here to Register</a>');

            }

        while($info = mysql_fetch_array( $check ))  

            {

          $_POST['password'] = md5($_POST['password']);
          $_POST['password'] = $_POST['password'];



             //gives error if the password is wrong



           if (@ $_POST['password'] != $info['password']) {

            die('Incorrect password, please try again');


              }

              else 

             { 


          // if login is ok then we add a cookie 

         $_POST['user_name'] = stripslashes($_POST['user_name']); 

     $hour = time()   3600; 

            setcookie(ID_my_site, $_POST['user_name'], $hour); 

            setcookie(Key_my_site, $_POST['password'], $hour);   



            //then redirect them to the members area 

           header("Location: home.php"); 

            } 

           } 

            } 

          else 

          {  



           // if they are not logged in 

           ?> 
  

2-й код:

Затем на каждой странице участника я использую следующее, чтобы убедиться, что их логин правильный:

       // Process the POST variables
       $email = $_SESSION["user_name"];


     // Set up the session variables
    $_SESSION["user_name"] = $username;


   if(!isset($_SESSION['user_name'])) { header("Location: log.php");}
  

Ответ №1:

Перефразируя Blowski:http://kb.mozillazine.org/The_page_is_not_redirecting_properly

Похоже, что firefox достиг максимальной глубины рекурсии: он обнаружил кажущийся бесконечным цикл перенаправлений

Ответ №2:

Как называются файлы в приведенных выше сценариях? Если имя первого скрипта равно home.php затем, когда пользователь посещает home.php если пароль неверен, он будет продолжать перезагружаться, поэтому Firefox вернет это сообщение.

В качестве альтернативы, есть ли у вас что-нибудь в вашем .htaccess, что является причиной этого?

Комментарии:

1. первое ограничение — это log.php . htaccess имеет файл, который принимает входящее имя пользователя для отображения страницы, так что представьте blowski.domain.com ..

2. @KPO Хм, ты можешь также опубликовать содержимое своего файла .htaccess? Это часто является причиной ошибочных перенаправлений.

3. @KPO У меня возникают реальные проблемы при попытке отладить код, потому что есть довольно много битов, которые, похоже, используют глобальные переменные (или на самом деле являются ошибками). например, строка 25: $secret = $info['password']; Моим предложением было бы заставить его работать с одним URL, удалив .htaccess. Затем, когда вы знаете, что это работает с PHP, установите статическую версию, работающую с .htaccess. Затем объедините две. Еще лучше — попробуйте разбить это на несколько функций, чтобы вы могли тестировать каждый бит кода отдельно, а не как один большой блок.

4. @blowski спасибо. Есть ли другой скрипт, который я могу использовать. Я слишком новичок, чтобы вносить изменения. Спасибо.

5. @KPO Ознакомьтесь также с некоторыми фреймворками — CodeIgniter, Symfony, CakePHP, Yii — все это PHP-фреймворки с надежными системами аутентификации, которые в основном являются «подключи и играй». Лично я, даже если вы заплатите кому-то, попросил бы их внедрить фреймворк вместо того, чтобы начинать с нуля.