代码之家  ›  专栏  ›  技术社区  ›  Anirudh Goel

提供登录检查,PHP中所有页面的页面重定向

  •  0
  • Anirudh Goel  · 技术社区  · 16 年前

    我正在使用PHP创建一个简单的动态网站,允许用户登录并访问特定页面。这就是我迄今为止所做的。

    登录值是通过php脚本中的$_post变量获取的,该脚本从数据库中为注册用户获取值。如果找到用户,我会执行以下操作:

    session_register('userid');
    $_SESSION['userid'] = $username;//this is taken from $_POST
    $_SESSION['accesslevel'] = $access;
    

    在php脚本的开头 session_start();

    现在我的问题来了。

    现在,在每个页面上,我都必须检查是否允许用户查看该页面,如果不允许,则必须将其重定向到login.php;如果允许,则必须继续加载页面。

    到目前为止,我学到的是,在PHP页面中维护值的唯一方法是使用 $_SESSION 变量,以及使用会话变量时必须写入的页面 session_start() 在每一页的第一行,否则我将得到标题已经发送错误。

    奇怪的是,我确实做到了这一点,但仍然得到“头已经发送”的错误消息。

    所以我想知道设计一个网站的最佳方法是什么,在那里我必须在大多数页面上使用会话变量,并将这些常见的检查放在一个共同的地方。

    • 我可以使用include()功能吗?
    • 会话是跨PHP页面通信数据的唯一方法。
    • 更好的方法是什么?

    我有以下代码:

    <?php
    session_start();
    if(!isset($_SESSION['user']))
    {
        $_SESSION['loc'] = "adminhome.php";
        header("location:ettschoollogin.php");
        exit();
    }
        ?>
    

    它位于每个想要检查用户是否登录的页面的顶部。

    这是检查登录的脚本

    <?php
    session_start();
    include("connection.php");
    $userid =$_POST['userid'];
    $userpwd =$_POST['userpwd'];
    
    $query="Select UNAME,UPASSWORD,SCHOOL,uaccess from schooluser where uname = '$userid'";
    
    $result=mysql_query($query) or die("couldn't execute the query");
    $row=mysql_fetch_array($result);
    $useraccess = $row["uaccess"];
    
    
    $school =$row[2];
    
    if(($row[0]==$userid)&&($row[1]==$userpwd))
    {
            session_register('userid');
            $_SESSION['userid']=$userid;
            $_SESSION['school']=$school;
    
        if($useraccess =="admin")   
        {       
            header("Location:adminhome.php");
        }
    
        if($useraccess !="admin")
        {
            header("Location:school_main.php");
    
        }
    }
    else
    {
        header("Location:ettschoollogin.php?err=1"); 
    }
    ?>
    

    我意识到在“?>“,但我还是明白。

    谢谢,伙计们,我错过了,而且“connection.php”文件后面实际上还有多余的空间?>“我以前把它删除过,但有些文件又被重写了。非常感谢。

    3 回复  |  直到 13 年前
        1
  •  2
  •   Rik Heywood    16 年前

    是的,您可以使用include。将所有常见的函数放在一个单独的PHP文件中,并在每个文件的顶部“包含”它。

    您可以使用cookie来存储信息(通常只是用于在PHP页面中查找其他信息的ID)。不过,通常使用cookie处理PHP会话。见 setcookie 在文档中。

    您可能会收到错误消息,因为 <?php ?> 块。一个常见的错误是在include文件的末尾,在 ?> . 该空行将被输出,您的头将被发送。如果这不是问题所在,您只需确保将与会话相关的代码移到任何可能生成某些输出的代码之上(例如,使用print或echo)。

        2
  •  2
  •   Palantir    16 年前

    我可以使用include()功能吗?

    对。您可以在会话_start()调用之前做任何您想做的事情,但您不能输出任何内容,甚至不能输出单个空格或字符。可能您已经输出了一些内容,可能是自动包含或Apache预处理。

    会话是跨PHP页面通信数据的唯一方法。 更好的方法是什么?

    其他方法是cookie、post和get参数。但是会话是在页面之间安全传递数据而不将数据发送到客户端和后台的唯一方法(这可能会带来安全风险)。

        3
  •  1
  •   Spudley Pat    13 年前

    ob_start(); 在代码的顶部,然后就不会出现“headers already send”的错误。