2015-04-16 107 views
1

用戶登錄後(在login.php中),它們被重定向到control.php。如果他們關閉瀏覽器並重新打開control.php,他們會被要求重新提交表單。如何使用我設置的cookie,而不是重新提交表單?每次頁面重新加載時,表單都會重新提交

的login.php

<?php session_start(); /* Starts the session */ 
$logins = array('username' => 'pass12'); 
if(isset($_COOKIE['userME']) && isset($_COOKIE['passME'])){ //if cookie is set do this 
$Username=$_COOKIE['userME']; 
$Password=$_COOKIE['passME']; 
echo $Username.'-'.$Password; 
    if (isset($logins[$Username]) && $logins[$Username] == $Password){ 
     /* Success: Set session variables and redirect to Protected page */ 
     $_SESSION['UserData']['Username']=$logins[$Username]; 
     header("location:control.php"); 
     exit; 
    } else { 
     /*Unsuccessful attempt: Set error message */ 
     $msg="<span style='color:red'>1Invalid Login Details</span>"; 
    } 

} 
else{ //else new person 
    /* Check Login form submitted */  
    if(isset($_POST['Submit'])){ 
     /* Check and assign submitted Username and Password to new variable */ 
     $Username = isset($_POST['Username']) ? $_POST['Username'] : ''; 
     $Password = isset($_POST['Password']) ? $_POST['Password'] : ''; 

     /* Check Username and Password existence in defined array */   
     if (isset($logins[$Username]) && $logins[$Username] == $Password){ 
      /* Success: Set session variables and redirect to Protected page */ 
      $_SESSION['UserData']['Username']=$logins[$Username]; 
      setcookie('userME',$Username,time()+60*60*24*10,'/','71.12.145.29'); 
      setcookie('passME',$Password,time()+60*60*24*10,'/','71.12.145.29'); 
      header("location:control.php"); 
      exit; 
     } else { 
      /*Unsuccessful attempt: Set error message */ 
      $msg="<span style='color:red'>2Invalid Login Details:<?php echo $Username.'-'.$Password?></span>"; 
     } 
    } 
} 
?> 

<form action="" method="post" name="Login_Form"> 
    <table width="400" border="0" align="center" cellpadding="5" cellspacing="1" class="Table"> 
    <?php if(isset($msg)){?> 
    <tr> 
     <td colspan="2" align="center" valign="top"><?php echo $msg;?></td> 
    </tr> 
    <?php } ?> 
    <tr> 
     <td colspan="2" align="left" valign="top"><h3>Login</h3></td> 
    </tr> 
    <tr> 
     <td align="right" valign="top">Username</td> 
     <td><input name="Username" type="text" class="Input"></td> 
    </tr> 
    <tr> 
     <td align="right">Password</td> 
     <td><input name="Password" type="password" class="Input"></td> 
    </tr> 
    <tr> 
     <td> </td> 
     <td><input name="Submit" type="submit" value="Login" class="Button3"></td> 
    </tr> 
    </table> 
</form> 

control.php

<?php 
session_start(); 
echo "Hello, ".$_COOKIE['userME'].'<br>'; 
if(isset($_SESSION['UserData']['Username'])) 
{ 
    if (isset($_POST['submit'])) { 
     switch ($_POST['submit']) { 
      case 'room_light': 
        //execute code here 
       break; 
      case 'blink': 
        echo shell_exec("sudo ruby /home/pi/Desktop/PiControl/blinkPin1.rb"); 
       break; 
     } 
    } 
    ?> 

    <form method="post"> 
    <input type="submit" name="submit" value="room_light"> 
    </form> 
    <?php 
} 
else 
{ 
    header("location:login.php"); 
} 
?> 
+0

在control.php中,爲什麼不使用'if(isset($ _ COOKIE ['userME'])&& isset($ _ COOKIE ['passME'])){// do something}'因爲您已經擁有了它文件;你嘗試過嗎?這應該工作。 –

+0

另外,在cookies中存儲密碼不是一個好主意。 http://stackoverflow.com/q/2100356/ --- http://stackoverflow.com/q/3928630/ --- http://security.stackexchange.com/questions/9455/is-it-safe- to-store-the-password-hash-in-a-cookie-and-use-it-for-remember-me- –

+0

這就是把它放得很溫和* Ralph *。 @ Fred-ii-哎呀! –

回答

2

通常的方式來處理,這是真正建立三個網頁:

  1. 一形成網頁,顯示錶格和附屬信息在發送到第2頁;
  2. 檢查網頁,檢查密碼,設置cookie並立即重定向到第3頁;
  3. 一個結果網頁,使用該cookie逐頁設置2.

因此,重裝3頁時,它會立即重複使用的cookie的頁面設置2.

此外,你應該避免將密碼存儲在cookie中。您至少可以在Cookie中儲存hash('sha256', $password);並檢查密碼的(預先計算的)哈希值。

這樣,密碼永遠不會駐留在磁盤上,只存在於內存中,這對安全起見更好。您可以使用以下鏈接查看關於此主題的更多信息,感謝Fred -ii-Is it secure to store passwords in cookies?; php, is there a safe way to store password in cookies?; Is it safe to store the password hash in a cookie and use it for 「remember-me」 login?

會有更好的哈希方案,比如用隨機值醃製,但這可能會讓您編寫的應用程序太複雜。

+0

感覺自由,不要害羞,添加我在OP的問題[在此評論]中留下的鏈接(http://stackoverflow.com/questions/29680025/form-重新提交 - 每次頁面被重新加載#comment47497851_29680025),作爲未來的參考,我的評論應該消失。 –

相關問題