Является ли $ _SERVER [HTTP_HOST] причиной проблем с перенаправлением? - PullRequest
0 голосов
/ 14 марта 2011

Я включил тщеславные URL (user.domain.com). Когда сеанс истекает или кто-то очищает куки, страница будет перенаправлена ​​на user.domain.com, который имеет страницу входа. Итак, на всех страницах я использую следующий код:

 if(!isset($_SESSION['user_name'])) { header("Location: http://$_SERVER[HTTP_HOST]");}

2 из 10 раз я получаю ошибку перенаправления, говорящую, что страница перенаправляет слишком много раз.

Может ли это быть причиной? И если это то, что я могу сделать, чтобы перенаправить таким образом, чтобы не вызвать таких проблем.

Спасибо.

Код входа:

<?php

 session_start(); 



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


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

   $ugData = $_REQUEST['sub_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 accounts WHERE user_name = '$username' and sub_name='$ugData'")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 accounts 
    WHERE user_name = '".$_POST['user_name']."' 
    and sub_name='".$ugData."'")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 

           {     





          ?> 

Ответы [ 3 ]

1 голос
/ 14 марта 2011

header("Location: http://{$_SERVER['HTTP_HOST']}"); не проблема, скажем так.

Однако, если у вас есть этот код на странице входа в систему, тогда да, вы просто будете перенаправлять себя на домашнюю страницу, потому что выне сможет войти в систему.

Убедитесь, что вы не перенаправляете пользователя, если он находится на странице входа.

РЕДАКТИРОВАТЬ: Попробуйте header('Location: /'); Может быть, вывозникла странная проблема с сервером, из-за которой $_SERVER['HTTP_HOST'] иногда может быть нулевым.

1 голос
/ 14 марта 2011

Если предположить, что перенаправление на http://yourserver/ означает http://yourserver/index.php, то вам следует изменить значение if на

if(!isset($_SESSION['user_name']) && $_SERVER['PHP_SELF'] != '/index.php')
{
    header("Location: http://$_SERVER[HTTP_HOST]");
}

. Это позволит избежать бесконечных перенаправлений.

0 голосов
/ 14 марта 2011

Попробуйте использовать это с die ():

if(!isset($_SESSION['user_name'])) { header("Location: http://user.domain.com"); die();}

Если url меняется с пользователя на пользователя, сначала выберите имя пользователя из db и используйте его для перенаправления.Попробуйте что-то вроде:

...
$username = $row["username"];
...

и используйте его:

if(!isset($_SESSION['user_name'])) { header("Location: http://".$username.".domain.com"); die();}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...