2015-09-07 117 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