簡體   English   中英

成功登錄時不重定向

[英]Not redirecting on successful login

我已經完成了一個登錄表單,它在我的WAMP服務器上100%工作。 然而,當我在實時服務器上運行它時,一切都可以100%工作,除了我登錄時它不會將我的頁面重定向到它應該的頁面(只顯示一個空白的HTML頁面)。 然而,它已登錄,因為如果我輸入它應該去的頁面的URL,它會顯示它應該。 文件的路徑是正確的。 我希望我的問題很清楚。 這是我的登錄表單的代碼:

<?php 
include_once "includes/scripts.php";
session_start();
include_once ("includes/connect.php");

if(isset($_SESSION['logged_in'])) {
    header('location: admin_cms.php');
    exit();
} else {
    if(isset($_POST['username'], $_POST['password'])) {
        $username = $_POST['username'];
        $password = md5($_POST['password']);

        if(empty($username) or empty($password)) {
             $error = '<p>NOTE: Fields are blank</p>';  
        } else {
             $query = $pdo->prepare("SELECT * FROM users WHERE user_name = ? AND user_password =?");
             $query->bindValue(1, $username);
             $query->bindValue(2, $password);
             $query->execute();
             $num = $query->rowCount();

             if($num == 1) {
                 $_SESSION['logged_in'] = true;
                 header('location: admin_cms.php');
                 exit();
             } else {
                 $error = "<p>NOTE: The username or password is incorrect</p>";     
             }
        }
    }
?>
    <div id="login_container">
        <br><img src="images/camelhorst_logo_full.png" style="margin-top:38px;">
        <h1>LOGIN<img src="images/three_column_grid_line.png" alt="line"></h1>
        <form  acton = "admin.php" method="post" autocompleate="off">
            <label>Username:</label>
            <input type="text" name="username" placeholder="Your Username" required autocomplete="off">
            <label>Password:</label>
            <input type="password" name="password" placeholder="Your Password" required autocomplete="off">
            <input type="submit"  value="Login" name="submit_login">
        </form>
<?php 
      if(isset($error)) {
          echo $error;
      }
?>
      <p id="copyright_admin"> © CAMELHORSE CREATIVE STUDIO 2013 </p>
    </div><!--login_container-->
<?php 
 } 
?>
</body>
</html>

首先是

session_start() 

必須位於頁面頂部。 它之前什么也沒有,沒有空格。

其次,

if (empty($username) or empty($password)){

需要用這個代替

if (empty($username) || empty($password)){

試試看,看看它是否有效

此外,這是一個有點偏離主題,我敢肯定它不是導致你的問題,但md5()已經過時了。 嘗試使用

sha1();

用於加密。 sha1()也有點舊,但它比md5()更好。

這也是一個偏離主題的話題。 但是,這似乎值得注意。 你有

if(isset($_POST['username'], $_POST['password'])) {
    $username = $_POST['username'];
    $password = md5($_POST['password']);

    if(empty($username) or empty($password)){
        $error = '<p>NOTE: Fields are blank</p>';   
    }

默認情況下,即使加密內容的值為空,md5也會返回32個字符的十六進制數。 所以,條件

empty($password)

有點多余。 最好的是這個:

if(isset($_POST['username'], $_POST['password'])) {
    $username = $_POST['username'];
    $password = $_POST['password'];
    $pass_enc = md5($_POST['password']);

    if(empty($username) || empty($password)){
        $error = '<p>NOTE: Fields are blank</p>';   
    }

將重定向更改為此。

echo "<script>window.location='admin_cms.php'<script>";

大多數情況下,當header()重定向失敗時,這是因為之前有輸出(即使空白在這里很重要),因此您可能需要確保文件或任何包含的文件上沒有先前的輸出。

<?php include_once "includes/scripts.php"; ?>

include_once ("includes/connect.php");

注意:<?php?>標記之外的任何空格都被視為輸出。 例如

<?php ...some php code... '
  //space below causes output to be written to html
?>

<?php
   ...more php code here...
?>

伊克巴爾馬利克是對的。 你應該使用echo“window.location ='admin_cms.php'”;

對於重定向但是如果你想保留header()的東西你必須放

 ob_start()

在頁面頂部,正下方

 session_start()

它會像魅力一樣工作。

編輯:關於md5 / sha1的事情,我開始使用:

 hash("sha512", md5($password))

我的密碼加密。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM