2016-05-17 34 views
0

我試圖做一個頁面管理面板使用案例,開關和會話。php登錄/註銷作爲一個頁面

我的代碼是:

<?php 
    if (isset($_SERVER['QUERY_STRING'])) { 
     switch ($_SERVER['QUERY_STRING']) { 
      case "logout": 
       break; 
      case "restpassword": 
       break; 
      // Default Page 
      default: 
       session_start(); 
       if (isset($_POST['username']) && isset($_POST['password']) && $_POST['username']) { 
        $username = $_POST['username']; 
        $password = $_POST['password']; 
        $userid = login($username, $password); 

        if ($userid != "0") { 
         //Correct username and password set session & redirect 
         if (isset($_SESSION['user_id'])) { 
          $userid = $_SESSION['user_id']; 
          $username = $_SESSION['username']; 
          echo "Welcome " . $username; 
         } 
         break; 
        } else { 
         $msg = "Incorrect username or password"; 
        } 
       } 
       ?> 
       <html> 
        <head> 

        </head> 
        <body> 
         <form method="post"> 
          <?php 
           //Print error message 
           if (isset($msg)) { 
            echo $msg; 
           } 
          ?> 
          <label>Username:</label> 
          <input name="username" type="text" required="true"/> 
          <label>Password :</label> 
          <input name="password" type="password" required="true"/> 
          <input type="submit" name="submit" value="Login" required="true"/> 
         </form> 
        </body> 
       </html> 
       <?php 
       break; 
     } 
    } 
?> 

的問題是,如果我再進入到頁面它不保存任何會話,我不得不重新登錄。

我應該如何解決這個問題,並確保它的安全性?

非常感謝

+2

將'session_start()'移動到頁面的頂部,而不是'switch'代碼的一部分。 – mitkosoft

+0

從你的登錄鏈接,我會建議你傳遞一個變量。像www.login.com?用戶訪問一樣。這樣,如果$ _GET [user] = access,那麼您可以運行登錄功能,執行檢查並保存會話。然後對於註銷鏈接,運行您的註銷功能的另一個變量。希望你明白,如果你仍然想堅持一個頁面 –

+0

可以給我一個示例代碼如何做到這一點,謝謝 – Markos

回答

0

移動在session_start()到你的頁面的最頂端。 php打開標籤後的第一行...

+0

同樣的問題,仍然不能正常工作 – Markos

+0

你可以分解你的代碼,拿出一些東西並排除故障 –

-1

session_start()需要添加在頁面的最頂端。我認爲這會起作用。