2017-05-16 42 views

回答

0

原始腳本

形式

> <form action="<?php echo $_SERVER['PHP_SELF']?>" method="post"> 
> Username: <input type="text" name="username" maxlength="40"> Password: 
> <input type="password" name="pass" maxlength="50"> <input 
> type="submit" name="submit" value="Log in"> </form> 

一個非常簡單的登錄表單與用戶名,密碼,當然還有一個提交按鈕領域。在這一點上我還應該提到,爲了簡化本教程,我使用「PHP_SELF」(表單動作代碼包含在同一文件中)。我建議將所有腳本保存在單獨的文件中以供實際開發。

的PHP

出於安全原因,所以我不放棄我所有的祕密,我不會在這裏分享整個登錄腳本。如果你仍然在閱讀本教程,我假設你對PHP有一定的瞭解,並且確實需要一個你正在嘗試改進的登錄腳本,所以這不應該是一個問題。

一次,我已經連接到我的數據庫,並進行了我的驗證檢查我繼續使用下面的代碼登錄校驗的用戶的:

$hour = time() + 3600; 
    setcookie('ID_my_site', $_POST['username'], $hour); 

//then redirect them to the members area 
header("Location:example-page.php"); 

以上我簡單地設置兩個cookie每次持續一小時一個用於用戶名,一個用於密碼,並將它們重定向到成員區域。

添加記得我的功能

形式

首先,我們需要真正爲我們的形式,其還記得我複選框。添加這使得我們的形式是這樣的:

<form action="<?php echo $_SERVER['PHP_SELF']?>" method="post"> 
Username: 
<input type="text" name="username" maxlength="40"> 
Password: 
<input type="password" name="pass" maxlength="50"> 
<input type="checkbox" name="remember" value="1">Remember Me 
<input type="submit" name="submit" value="Log in"> 
</form> 

的PHP

現在我們需要讓這個複選框做一些事情。也就是說,在選中時,請記住用戶的用戶名,並將其放置在每次對登錄頁面的相應訪問的用戶名字段中。爲此,我決定使用cookie。我無法使用上面設置的「ID_my_site」用戶名cookie,因爲每次用戶註銷時都會殺死它。該解決方案是創建一個名爲「記住」這也存儲了用戶名,像這樣一個額外的cookie:

$year = time() + 31536000; 
setcookie('remember_me', $_POST['username'], $year); 

上面我們已經加入這一額外的cookie,持續了一年,所以當它在用戶登錄創建一個附加的cookie保存用戶的用戶名。但目前尚未使用。更改:

<input type="text" name="username" maxlength="40"> 

到:

<input type="text" name="username" maxlength="40" value="<?php 
echo $_COOKIE['remember_me']; ?>"> 
在我們的登錄表單

現在將存儲該用戶名的文本字段爲今後的訪問:

我們還沒有完成,但。目前,代碼正在爲每個用戶存儲這些信息。我們希望它只記住專門請求此功能的用戶。爲此,我們在創建其他Cookie之前進行簡單的檢查。此檢查會查看是否記住我的複選框已被選中,並且只會創建新的cookie(如果有)。像這樣:

if($_POST['remember']) { 
setcookie('remember_me', $_POST['username'], $year); 
} 
elseif(!$_POST['remember']) { 
    if(isset($_COOKIE['remember_me'])) { 
     $past = time() - 100; 
     setcookie(remember_me, gone, $past); 
    } 
} 

上面的代碼也能處理,其中一個cookie存在的情況下,但用戶已經確定了,他們不再希望通過在過去塞汀任何現有的cookie的時間記住,本質殺死他們。

進一步改進

上面的代碼的確沒有達到這個教程的主要目的,記住用戶在日誌中用戶名的形式時,他們提出要求。但是,爲了進一步提高可用性,我希望在用戶請求記住時自動檢查複選框,而當用戶沒有記住時則不選中。添加到我們的表格給我們我們的最終形式代碼:

<form action="<?php echo $_SERVER['PHP_SELF']?>" method="post"> 
Username: 
<input type="text" name="username" maxlength="40" value="<?php 
echo $_COOKIE['remember_me']; ?>"> 
Password: 
<input type="password" name="pass" maxlength="50"> 
<input type="checkbox" name="remember" <?php if(isset($_COOKIE['remember_me'])) { 
     echo 'checked="checked"'; 
    } 
    else { 
    echo ''; 
} 
?> >Remember Me 
<input type="submit" name="submit" value="Log in"> 
</form> 
+0

請參考它被複制的來源。 –

+0

謝謝你提供的東西和指導 – arshad