2015-09-07 115 views
0

我是編程新手,我正在使用一些PHP。給我一個名爲login.php的文件和一些方向來創建稱爲admin.php的第二個文件。PHP未設置會話和Cookie


以下是說明。

admin.php

  • 如果用戶試圖訪問此文件,而無需登錄,他們重新引導回的login.php頁面應該顯示一條消息,說「無效登錄」 - 使用會話變量進行檢查。

  • 如果他們登錄:

    • 爲他們提供與消息「的loggedIn」 cookie的值:「你登錄1月25日,上午10:00」(或任何值)

    • 未設置會話變量,破壞了會議,並

    • 未設置兩個餅乾(會話和「的loggedIn」),並設置爲過期所以它會被瀏覽器刪除。

    • 注意:添加代碼來破壞會話和cookie之前測試中的login.php的部分已經登錄。

一旦你得到了上面的工作,改變你的代碼,這樣,如果他們被重定向從admin.php的到的login.php,它應該顯示不同的信息:「您需要登錄」。

<?php 
    session_start(); 
    $message = null; 

    if (isset($_SESSION['loggedIn']) && $_SESSION['loggedIn'] == 'true') { 
     header("Location: admin.php"); 
     exit(); 
    } 

    if ($_SERVER['REQUEST_METHOD'] == 'GET') { 
     if (sizeof($_GET) && isset($_GET['username']) && isset($_GET['password']) && $_GET['username'] && $_GET['password']) { 
      if ($_GET['username'] == 'username' && $_GET['password'] == 'password') { 
       $_SESSION['loggedIn'] = 'true'; 
       setcookie ("loggedIn", date("F d,Y h:ia"), time()+60*10, "/", $_SERVER['SERVER_NAME']); 
       header("Location: admin.php"); 
       exit(); 
      } else { 
       $message = 'Invalid Login'; 
      } 
     } else { 
      $message = 'Invalid Login'; 
     } 
    } 

?> 
<!DOCTYPE HTML> 
<html> 
    <head> 
     <title>Login</title> 
    </head> 
    <body> 
     <?php if($message) echo '<div class="warning">' . $message .  '</div>'; ?> 
     <form method="get"> 
      <label for="username">Username</label> 
      <input type="text" name="username" id="username" value="username" /> 
      <label for="password">Password</label> 
      <input type="password" name="password" id="password" value="password" /> 
      <input type="submit" name="submit" value="Login" /> 
     </form> 
    </body> 
</html> 

下面的代碼是我到目前爲止所。我想知道我的未設置對於會話變量和cookie是否正確。此外,我怎麼顯示日期和時間,在說明中規定,以及我如何顯示「您需要登錄,如果用戶被定向到從admin.php的網頁頁面的login.php的消息?

<?php 
session_start(); 

if (!isset($_SESSION['loggedIn']) && $_SESSION['loggedIn'] == 'false') { 
     header("Location: login.php"); 
     exit(); 
    } else { 
     unset($_SESSION['loggedIn']); 
     session_unset(); 
     session_destroy(); 
     unset($_COOKIE['loggedIn']); 
    } 
?> 

回答

0

我想我下架什麼你所要求的完全。讓我知道這是不對的。

首先用於消息,我將有它重定向到一個GET URL 所以也許http://example.com/login.php?login=error或做類似的東西

那麼你會說

if($_GET['login'] == 'error') { 
    echo '<h1>You Need to login</h1>'; 
} 

現在的日期和時間我會看w3 school,所以你可以找到你想要的格式。如果你仍然不知道讓我知道。

最後,爲了取消設置cookie,您應該將cookie設置爲無。所以setcookie(「username」,「」)

0

您正在使用似乎執行類似任務的SESSION變量和COOKIE變量的混合。您應該擁有SESSION變量中的所有內容,然後當您想要將用戶登錄出去時,只需撥打session_destory即可。

此外,您正在使用$_GET變量登錄,這可能會導致安全問題,因爲這些變量將在URL中可見,這意味着任何查看該人員計算機歷史記錄的人都將能夠在URL中以明文形式查看其密碼。您應該改用$_POST

0

你有一個錯誤有:

!isset($_SESSION['loggedIn']) && $_SESSION['loggedIn'] == 'false' 

總是eveluated到false

$array = []; 

$a1 = !isset($array['loggedIn']) && @$array['loggedIn'] == 'false'; 

$array = ['loggedIn' => 'false']; 

$a2 = !isset($array['loggedIn']) && @$array['loggedIn'] == 'false'; 

$array = ['loggedIn' => 'true']; 

$a3 = !isset($array['loggedIn']) && @$array['loggedIn'] == 'false'; 

var_dump([$a1, $a2, $a3]); 

// array(3) { 
// [0]=> 
// bool(false) 
// [1]=> 
// bool(false) 
// [2]=> 
// bool(false) 
// } 

更好地利用這一點:

!(isset($array['loggedIn']) && @$array['loggedIn'] != 'false') 

結果:

$array = []; 

$a1 = !(isset($array['loggedIn']) && @$array['loggedIn'] != 'false'); 

$array = ['loggedIn' => 'false']; 

$a2 = !(isset($array['loggedIn']) && @$array['loggedIn'] != 'false'); 

$array = ['loggedIn' => 'true']; 

$a3 = !(isset($array['loggedIn']) && @$array['loggedIn'] != 'false'); 

var_dump([$a1, $a2, $a3]); 

// array(3) { 
// [0]=> 
// bool(true) 
// [1]=> 
// bool(true) 
// [2]=> 
// bool(false) 
// } 
+0

if(empty($ array ['loggedIn'])|| $ array ['loggedIn'] =='false')我想.. – hanshenrik

+0

...或'(@ $ rray ['loggedIn']?:'false')=='false''或另一個變體。 .. – ankhzet