2016-05-17 52 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()需要添加在页面的最顶端。我认为这会起作用。