2016-03-08 113 views
0

Okey guys,我尝试使用访问代码保护页面,但如果某些人在url中写入pagename.php页面未加载,页面加载时未检查我的代码。代码工作后把正确的接入码重定向到我的网页,但网页无法在URL我的页面写入后无码固定客户访问页面.....如何使用访问代码保护页面

<?php 
include ('modules/conf.php'); 
session_start(); 
if($_SERVER["REQUEST_METHOD"] == "POST") { 
$secretcode = mysqli_real_escape_string($db,$_POST['secretcode']); 
$sql = "SELECT * FROM password WHERE password = '$secretcode'"; 
     $result = mysqli_query($db,$sql); 
     $row = mysqli_fetch_array($result,MYSQLI_ASSOC); 
     $active = $row['active']; 
     $count = mysqli_num_rows($result); 
     if($count == 1) { 
     $_SESSION['login_user'] = $secretcode; 
      session_start(); 
     header("location: question.php"); 
     }else { 
     echo '<script type="text/javascript">'; 
    echo 'setTimeout(function() { swal("", "Съжеляваме вашият код е невалиден");'; 
    echo '}, 1000);</script>'; 
     } 
    } 
?> 
    <div class="section"> 
     <div class="container-fluid gamebox"> 
      <div class="row"> 
      <div class="col-md-6"> 
      <div class="secretcode"> 
      <h1 class="text-center">въведете код от брошурата</h1> 
      <form action="" method="post" class="formsecretcode text-center"> 
<input type="secretcode" id="codeverify" name="secretcode" placeholder="въведете вашият код"> 
<input type="submit" class="buttonsubmit" name="submit" value="провери код"> 
</form> 

      </div> 
      </div> 
+0

旁注:您不需要使用'session_start();'两次,这可能会触发会话已经开始。 –

+0

你向我们展示了密码页面,但不是应该是安全的页面(question.php)。在该页面上,您必须检查您的$ _SESSION ['login_user']'是否已定义,如果不是,则重定向。 – WheatBeak

+1

**答:**简单。检查会话是否设置*(带有可选的“if {equal to something}'”)*,如果不是,'else {踢出}'。另外最好在头后添加'exit;',否则你的代码可能要继续执行。 –

回答

3

正如我在评论中说,看到没有人张贴了一个答案到目前为止,我提交以下。

检查会话是否已设置(使用可选的“if { equal to something }”),如果没有,则为else { kick them out }

的逻辑是,并且要使用您希望保护会议,并假设$secretcode每一页的部分等于12345为例:

<?php 

session_start(); 

if (isset($_SESSION['login_user']) && $_SESSION['login_user'] == '12345'){ 

    // Do something 

} 

else { 

    // Do something else 

} 

这也是最好的头后添加exit;,否则您的代码可能需要继续执行。

参考:


脚注:

你并不需要使用session_start();两倍,这可能会触发会话已经启动。

  • 使用一次,并在每一页的“顶部”,同时确保你没有头之前输出。

参考文献:


添加error reporting到您的文件(S)的顶部,这将有助于找到错误。

<?php 
error_reporting(E_ALL); 
ini_set('display_errors', 1); 

// Then the rest of your code 

旁注:显示错误应该只在分期完成,并且从不生产。


其他注意事项:

你可以任意检查这两个在这使得它更有点独特的查询,用户名和密码字。

$username = "Johnny B. Good"; 

$sql = "SELECT * FROM password 
     WHERE username = '$username' 
     AND password = '$secretcode'"; 

除非你只是检查一个密码,否则就按现在的方式留下你的查询。