繁体   English   中英

如何从我的网站中删除 PHP 中的登录会话?

[英]How do I erase a login session in PHP from my website?

我目前正在一个副项目网站上工作,并尝试在 PHP 中创建基本的登录会话。 我编写的代码应该在您注销后销毁会话,如果没有会话,则将您重定向到登录屏幕。

登录表格(index2.html.php)

<?php
if(isset($_SESSION['user']))
    {
      header("Location: https://website.com/mike-test/main.html.php"); 
    }
?>
<html lang="en-UK">
<head>
    <!- HEAD ------------------------------------------------------------------>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <link href="css/style.css" rel="stylesheet" type="text/css" media="all" />
        <link href="css/button.css" rel="stylesheet" type="text/css" media="all" />
        <link href="css/profile.css" rel="stylesheet" type="text/css" media="all" />
        <link href="css/menu.css" rel="stylesheet" type="text/css" media="all" />
        <link href="css/section.css" rel="stylesheet" type="text/css" media="all" />
        <link href="css/footer.css" rel="stylesheet" type="text/css" media="all" />
        <link href="css/subMenu.css" rel="stylesheet" type="text/css" media="all" />
        <link href="css/logIn.css" rel="stylesheet" type="text/css" media="all" />
        <script src="javaScript/logIn.js"></script>
        <!- To Be Changed! ->
        <link rel="icon" href="_Images/Logo.ico">
        <meta name="Pharmacy Project Log In" content="Pharmacy System">
        <title>Pharmacy Project</title>
</head>
<!- HEAD ------------------------------------------------------->
    <body>
        <!- BODY ------------------------------------------------------------------>
        <div id="content">
        <section> <!--Main Content here-->
                <img src="logo.png" id="logo" height="150" width="150">
            <form action="connection3.php" method="POST">
                <input type="text" name="username" placeholder="Username" required /><br />
                <input type="password" name="password" placeholder="Password" required /><br />
                <input type="checkbox" name="RememberMe" /><label>Remember Me</label><br />
                <button><input type="submit" name="submit" class="button" /></button><br />
            </form>
        </section>
        </div>
        <footer> <!--Just a footer-->
            <p>Website made by:<br /><br />

            <script>document.write(document.title)</script> 2019-
            <script>document.write(new Date().getFullYear())</script>. @ rights reserved</p>
        </footer>
    </body>
</html>

连接到数据库 - 创建会话(connection3.php)

session_start();

if(isset($_SESSION['user']))
    {
      header("Location: https://website.com/mike-test/main.html.php"); 
    }

if (!empty($_POST)) 
    {
        if (isset($_POST['username']) && isset($_POST['password'])) 
            {
                // Getting submitted user data from database
                $username = $_POST['username'];
                $password = $_POST['password'];
                $con = mysqli_connect("localhost", "pharmacy", "pharmacy", "pharmacy123");
                if(mysqli_connect_error()) 
                    {
                        die('Connect Error(' . mysqli_connect_errno() . ')' . mysqli_connect_error());
                    } else
                    {               
                        $result = mysqli_query($con, "SELECT username, Password FROM Employee WHERE username = '" . $username . "' AND Password = '" . $password . "'");

                        if(mysqli_num_rows($result) > 0)
                            {
                                $_SESSION['user'] = $username;
                                header('Location: https://website.com/mike-test/main.html.php');
                            } else
                            {
                                echo "user doesn't exist";
                            }
                    }
            } else
            {
                echo "Both fields are required";
            }
    }
?>

首页(main.html.php)

<html lang="en-UK">
        <?php
            session_start();
            echo $_SESSION['user'];
            if ( isset( $_SESSION['user'] ) ) 
                {} else {
                    // Redirect them to the login page
                    header("Location: https://website.com/mike-test/index2.html.php");
                }
        ?>
<head>
    <!- HEAD ------------------------------------------------------------------>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <link href="css/style.css" rel="stylesheet" type="text/css" media="all" />
        <link href="css/button.css" rel="stylesheet" type="text/css" media="all" />
        <link href="css/profile.css" rel="stylesheet" type="text/css" media="all" />
        <link href="css/menu.css" rel="stylesheet" type="text/css" media="all" />
        <link href="css/section.css" rel="stylesheet" type="text/css" media="all" />
        <link href="css/footer.css" rel="stylesheet" type="text/css" media="all" />
        <link href="css/subMenu.css" rel="stylesheet" type="text/css" media="all" />
        <script src="javaScript/logIn.js"></script>
        <!- To Be Changed! ->
        <link rel="icon" href="_Images/Logo.ico">
        <meta name="" content="Pharmacy System">
        <title>Project</title>

</head>
<!- HEAD ------------------------------------------------------->
    <body>
        <!- BODY ------------------------------------------------------------------>
        <img src="logo.png" id="logo" height="100" width="100">
        <div id="profile">
            <div id="text">
                <p id="Name">Name</p>
                <p id="status">Status</p>
            </div>
            <div id="image">
            <img src="logo.png">
            </div>
            <div id="menu">
                <a href="" target="_self"><button>Settings</button></a><br />
                <form action="close.php" method="POST">
                    <button type="submit" id="logout" value="logout">LogOut</button>         
                </form>
            </div>
        </div><!-- Profile Button  -->
        <nav>
        <ul id="mainMenu">
            <li><button type="button">Counter Sales</button></li>
            <li><button type="button">Dispense Drugs</button></li>    
            <li><button type="button">Stock Control</button></li>    
            <li><button type="button">Supplier Accounts</button></li>
            <li><button type="button">File Maintenance</button></li>
            <li><button type="button">Reports</button></li>    
        </ul><!--Main Menu Bar-->
        </nav>
        <div id="content">
        <section> <!--Main Content here-->
            <h1>Main Menu</h1>
            <p></p>
            <div class="grid">            
                <ul id="subMenu">
                    <li><button type="button">SubMenu1</button></li>
                    <li><button type="button">SubMenu1</button></li>
                    <li><button type="button">SubMenu1</button></li>
                    <li><button type="button">SubMenu1</button></li>
                    <li><button type="button">SubMenu1</button></li>
                    <li><button type="button">SubMenu1</button></li>
                    <li><button type="button">SubMenu1</button></li>
                </ul><!--Main Menu Bar-->
                <div style="background: blue;">
                    <p style="color: white;">Database here</p>
                <!--This is where database-->
                </div><div></div>
                <div id="actions">
                    <button type="button">SubMenu1</button>
                    <button type="button">SubMenu1</button>
                    <button type="button">SubMenu1</button>
                    <button type="button">SubMenu1</button>
                    <button type="button">SubMenu1</button>
                </div>
            </div>
        </section>
        </div>
        <footer> <!--Just a footer-->
            <p>Website made by:<br /><br />

            <script>document.write(document.title)</script> 2019-
            <script>document.write(new Date().getFullYear())</script>. @ rights reserved</p>
        </footer>
    </body>
</html>

关闭.php

unset($_SESSION['user']);
//session_destroy();
echo $_SESSION['user'];
echo "session should be terminated";
//header('Location: https://webiste.com/mike-test/index2.html.php');
?>

我已经尝试通过回显$_SESSION['user']在 close.php 和 main.html.php 中进行故障排除。 注销时,会话不会回显,因为它被破坏或未设置。 在尝试通过 url 链接手动访问 main.html.php 时, $_SESSION['user']仍然存在。 我向很多人和讲师寻求帮助,他们都认为代码没有问题,都傻眼了。

有没有什么办法解决这一问题?

您需要在取消设置之前恢复会话

我在 PHP.Net 上从session_start发表了以下引述:

session_start() 根据通过 GET 或 POST 请求或通过 cookie 传递的会话标识符创建会话或恢复当前会话。

在您的 close.php 中,您试图在没有首先恢复站点上的会话的情况下取消设置会话,您首先需要调用session_start()然后取消设置它。


<?php
session_start();
unset($_SESSION['user']);
echo $_SESSION['user'];
echo "session should be terminated";
?>

您的 logout.php 应如下所示

// Initialize the session
   session_start();
// Unset all of the session variables
   session_unset();
   $_SESSION = array();

// Destroy the session.
    session_destroy();
    unset($_SESSION['user']);
// Redirect to login page
    header("location: /");
    exit();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM