2015-02-11 50 views
0

我正在爲一個班級設計一個簡單的登錄頁面,並計劃在關閉瀏覽器後使用cookie來保持用戶登錄(如果他們選擇)。我使用複選框輸入按鈕來設置cookie。當用戶進入登錄頁面,在我的跡象送他們到一個腳本來檢查有效的用戶名和密碼,我也檢查按鈕使用在會話結束後讓用戶登錄的最佳方式是什麼?

#QotD.php 

    if(isset($_GET['signed_in']))  #check box value 
    if($_GET['signed_in']=="on"){ 
    if(isset($_GET['username'])) 
    $username = $_GET['username']; 
    setcookie('username',$username,time()+10000);#cookie set with username 
    } 

我認爲做的是有一個條件語句在登錄頁面文件的開始處檢查cookie是否已設置,以及是否直接進入主頁面。

#QotD_homepage.php 
if(isset($_COOKIE['username'])){ 
header("Location: main_page.php"); 
exit(); 
} 

的問題是,它似乎保持登錄的用戶是否勾選關閉或不。我嘗試添加一個按鈕來取消cookie的設置,但它沒有奏效。以這種方式處理cookie更有效嗎?

+1

條件語句是wrron – starkeen 2015-02-11 02:10:37

回答

2

首先,在用戶登錄,你將要使用的POST操作方法,因爲它隱藏了來自url的信息。 GET方法包含url中的信息,可以很容易地複製和黑客入侵。

其次,你的if語句應該是這樣的

if(isset($_GET['username'])) 
{ 
    $username = $_GET['username']; 
    # do something with username... 
    if(isset($_GET['signed_in']) && $_GET['signed_in']=="on") 
    setcookie('username',$username,time()+10000); 
    } 
} 

爲了解決您的關於爲什麼用戶被記錄在每一次的問題,即使你不設置cookie,原因可能是因爲你還沒有unset的cookie。這通常通過logout頁面完成。

的代碼創建一個退出頁面:

setcookie('username', null, 1); 

然後每次你想取消設置cookie來測試登錄不選中複選框時運行該頁面。

希望它有幫助:)

+0

我確實有一個註銷頁面!我在用戶登錄後在頁面上設置了一個按鈕,該按鈕將轉到小php文件,該文件使用將用戶重定向到登錄頁面的標頭方法取消設置cookie,但檢查cookie的條件語句似乎仍然是讀取爲true並將我發回到登錄後頁面。 – 2015-02-11 02:28:46

+0

您是否嘗試更改if語句? – Jack 2015-02-11 02:31:48

+0

複選框是複雜的html輸入。用單選按鈕嘗試代碼。如果它有效,那麼你知道它與你處理複選框數據的方式有關,而不是你的cookie代碼。 – Jack 2015-02-11 02:34:11

1

如果條件語句錯了,用括號括起來結束它來結束。使用下面

<?php 
    if(isset($_GET['signed_in'])) {  #check box value 
    if($_GET['signed_in']=="on"){ 
    if(isset($_GET['username'])) 
    $username = $_GET['username']; 
    setcookie('username',$username,time()+10000);#cookie set with username 
    } 
} 
?> 

OR

<?php 
    if(isset($_GET['signed_in'])) :  #check box value 
    if($_GET['signed_in']=="on"){ 
    if(isset($_GET['username'])) 
    $username = $_GET['username']; 
    setcookie('username',$username,time()+10000);#cookie set with username 
    } 
endif; 
?> 

希望這段代碼可以幫助您

相關問題