在网址栏中阻止php直接页面访问

时间:2013-07-29 17:20:36

标签: php session-variables sessionid

我正在核心php中做一个小应用程序。我的登录数据库是这样的

id
firstname
lastname
email
userid
account_type
contactno
password
在登录文件中

代码是这样的

<?php
    include_once("include/connection.php");
    session_start();
    session_unset();
?>
<?php
      $msg="";
    if(isset($_REQUEST['sub'])){
        $pswd=sha1($_REQUEST['psd']);
        $sel=mysql_query("select * from login where userid='".$_REQUEST['uid']."' and password='".$pswd."'");

        $rowsel=mysql_num_rows($sel);
        if($rowsel==1){
            $selacc=mysql_fetch_array($sel);
            if($selacc['status']!='banned'){
              $_SESSION['uid']=$selacc['userid'];
              $_SESSION['uname']=$selacc['fname']." ".$selacc['lname'];
              $_SESSION['upassword']=$selacc['password'];
              $_SESSION['acctype']=$selacc['acctype'];
              $_SESSION['agentcode']=$selacc['agent_code'];
              $_SESSION['authentication']="authenticated";
          header("location:dashboard.php");
          }
        }
        else{
          $msg="Enter Valid Username Password";
        }
    }
?>
<body>
    <form name="login-form" method="post" action="#">
    <input type="text" name="uid" class="inputbox" />
    <input type="password" name="psd" class="inputbox" />
    <input type="submit" name="sub" value="" class="inputbotton" />
  </form>

现在登录后,用户被定向为dashboard。但是从这里我直接输入``一个页面名称(比如说posts.php),它被重定向到post.php文件。但是在这里我想要一个被拒绝的访问权限,当有人直接在URL中输入页面名称(如post.php)时,它应该显示一些错误。但是当页面正常重定向时,它应该显示页面。我想阻止地址栏中的直接页面访问,但是当页面正常重定向时,它应该显示页面。

2 个答案:

答案 0 :(得分:2)

只需检查上一页中设置的任何会话变量,例如

 if(!isset($_SESSION['uid'])){
     echo 'error';
     exit;
 }

在顶部

进行

答案 1 :(得分:0)

其中有两个因素。

1)您在服务器上的文件夹和文件权限。

2)第一次登录时,应显示登录页面。但是,当你再次做同样的事情。变量存储在会话中,直到您关闭浏览器。因此,关闭浏览器并再试一次。您需要检查会话ID是否已设置,并根据该决定。