无法使会话能够用于登录站点php 7.2

时间:2019-04-02 03:31:12

标签: php session

我正在学习PHP,所以我正在创建一个登录站点。当用户输入有效凭据时,页面应定向到/site.php,但是当输入有效凭据时,页面将重定向回index.php。我正在使用在apache2上运行的端口8080上的域www.example.xyz进行此操作。

我已经通过测试新文件中的以下内容来测试会话是否正常运行: https://www.w3schools.com/php7/php7_sessions.asp

我只是不确定我的代码在做什么错

我知道与数据库的连接很好,因为我已经测试了代码,没有进行任何会话处理,并且可以按预期工作。

index.php

<?php

session_start();

require_once 'classes/membership.php';

$membership = new Membership();



if(isset($_GET["status"]) && $_GET["status"] == "loggedout")

{

    $membership->logOut();

}



if($_POST && !empty($_POST["username"]) && !empty($_POST["pwd"]))

{

    $response = $membership->validateUser($_POST["username"], $_POST["pwd"]);

}

 ?>



<!DOCTYPE html>



<head>



        <title>Login Page</title>

        <meta name="viewport" content="width=device-width, initial-scale=1.0">

        <script src = "http://code.jquery.com/jquery-3.3.1.min.js"></script>



        <body>



            <div>



                <form method="post" action="">

                    <h2>Login <small>enter your credentials</small></h2>



                    <p>

                        <label for="name">Username: </label>

                        <input type="text" name="username" />

                    </p>



                    <p>

                        <label for="pwd">Password: </label>

                        <input type="password" name="pwd" />

                    </p>



                    <p>

                        <input type="submit" id="submit" value="Login" name="submit" />

                    </p>



                </form>



                <?php if(isset($response)) echo "<h4>" . $response . "</h4>"; ?>



            </div>



        </body>



</head>

site.php

<?php
require_once 'classes/membership.php';

$membership = new Membership();

$membership->confirmMember();

echo phpinfo();

?>
<html>
<body>
<p>
  <a href = "index.php?status=loggedout">Log Out</a>
</p>
</body>
</html>

membership.php

<?php

require_once 'mysql.php';
class Membership
{
  function validateUser($un,$pw)
  {
    $mysql = new Mysql;
    $validateCreds = $mysql->verifyUserAndPass($un,md5($pw));

    if($validateCreds)
    {
      $_SESSION["status"] == "authorized";
      header("location: /site.php");
    }

    else
    {
      return "Enter valid creds.";
    }
  }

  function logOut()
  {
    if(isset($_SESSION["status"]))
    {
      unset($_SESSION["status"]);
    }

    if(isset($_COOKIE[session_name()]))
    {
      setcookie(session_name(),'',time() - 10000);
    }

    session_destroy();
  }

  function confirmMember()
  {
    if($_SESSION["status"] != "authorized")
    {
      header("location: /index.php");
    }
  }
}
 ?>

,如果输入有效的凭据,Mysql将返回true。

预期结果是当输入有效凭据时,应加载/site.php页面。用户单击site.php上的“注销”后,不应允许他们访问www.example.xyz:8080/site.php并将其定向回index.php

实际结果: 用户输入有效凭据,然后重定向到index.php。在firefox的网络Web工具中,我看到到达/site.php的页面,但收到HTTP 302,然后再次加载index.php,所以我在会话中做错了。

1 个答案:

答案 0 :(得分:0)

您缺少会话开始时间。我将其添加到成员资格类的构造函数中。可能还有其他事情,但我认为那是最明显的事情。

在设置会话参数时,您也使用==。只能使用=。