PHP - 在页面之间维护会话数组

时间:2015-07-04 20:28:45

标签: php arrays session

我有一个会话变量,它是一个数组,应该存储不同的用户名。在用户尝试登录时,将针对该阵列检查用户名以查看该数组中是否存在该名称。如果在阵列中找不到,则用户被重定向到注册页面,用户可以在其中输入用户名和密码。

此页面在接受用户名和密码后,应该更新会话数组,以便下次用户尝试登录时,他/她会被重定向到其他页面。

我可以注册,但是每次回到我的主页面时,都会刷新usernames数组以包含0个条目。

我可以用任何方式让我的数组更持久吗?

products.php

<?php
    session_start();
?>

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8" />
        <title>Studen Project #6 - M.M.</title>
        <link rel="stylesheet" href="mystyles.css" />
    </head>
    <body>
        <h1>Product Listings</h1>

        <form action="<?php echo $_SERVER["PHP_SELF"]; ?>" method="post">
            Username: <input type="text" name="username" /><br>
            Password: <input type="password" name="password" /><br><br>
            Enter a Quantity for Each Product<br><br>
            Pencils: <input type="number" name="pencils" /><br>
            Notebooks: <input type="number" name="notebooks" /><br>
            Folders: <input type="number" name="folders" /><br><br>
            <input type="submit" />
        </form>

        <h2>Dixon Ticonderoga Wood-Cased Pencils</h2>
        <h3>$2.88</h3>
        <img src="http://ecx.images-amazon.com/images/I/41OAcvBFqXL.jpg" alt="pencil" />
        <p>The World's Best Pencil with an exclusive #2 HB graphite core formula provides extra smooth performance</p>

        <h2>Five Star Stay-Put Pocket Folder</h2>
        <h3>$5.49</h3>
        <img src="http://ecx.images-amazon.com/images/I/71HaaqlhilL._SL1280_.jpg" alt="folder" />
        <p>Durable plastic folder helps keep sheets protected and in one place; great for reports, projects, as a take-home folder and for storage</p>

        <h2>Five Star Wirebound Notebook</h2>
        <h3>$18.98</h3>
        <img src="http://ecx.images-amazon.com/images/I/61NgdQwSjIL._SL1000_.jpg" alt="notebook" />
        <p>Five-subject plastic cover notebook has 200 college-ruled, 11 x 8.5 inch, 3-hole punched sheets</p>

        <?php
            $usernames = array();
            $_SESSION["usernames"];
            $_SESSION["quantity_total"];
            $_SESSION["username"];
            $_SESSION["pencils"];
            $_SESSION["folders"];
            $_SESSION["notebooks"];

            if($_SERVER["REQUEST_METHOD"] === "POST") {
                $_SESSION["usernames"] = $usernames;
                $_SESSION["username"] = $_POST["username"];
                $_SESSION["pencils"] = $_POST["pencils"];
                $_SESSION["folders"] = $_POST["folders"];
                $_SESSION["notebooks"] = $_POST["notebooks"];

                if(!in_array($_SESSION["username"], $_SESSION["usernames"])) {
                    header("Location:registration.php");
                    exit();
                } else {
                    $_SESSION["quantity_total"] = $_SESSION["pencils"] * 2.88 + 
                        $_SESSION["folders"] * 5.49 + $_SESSION["notebooks"] * 18.98;
                    header("Location:preview.php");
                    exit();
                }
            }
        ?>
    </body>
</html>

和registration.php

<?php
    session_start();
?>

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8" />
        <title>Student Project #6 - M.M.</title>
        <style>
            body {
                background-color: lightgreen;
                margin: auto;
                width: 75%;
                text-align: center;
            }
            h1 {
                color: blue;
                text-decoration: underline;
            }
            img {
                width: 100px;
                height: 100px;
            }
            form {
                padding: 5px;
                background-color: lightblue;
                font-weight: bold;
                font-family: Arial;
            }
        </style>
    </head>
    <body>
        <h1>Register Here!</h1>
        <img src="http://0.media.dorkly.cvcdn.com/36/35/6603dc5a9292104b44c349b85b5aaf7a-5-crazy-fan-theories-that-make-total-sense.jpg"
             alt="thumbsup"><br>
        <form method="post" action="<?php echo $_SERVER["PHP_SELF"]; ?>">
            Username: <input type="text" name="username"><br>
            Password: <input type="password" name="password"><br>
            <input type="submit" />
        </form>

        <?php
            if($_SERVER["REQUEST_METHOD"] === "POST") {
                array_push($_SESSION["usernames"], $_POST["username"]);
                header("Location: products.php");
            }
        ?>
    </body>
</html>

1 个答案:

答案 0 :(得分:2)

您可以考虑重新考虑在会话中存储用户/用户名列表及其属性的逻辑。 随着时间的推移,会话将变得越来越大,你将会遇到更多问题。

相反,将该信息存储在数据库中并在需要时查阅。

相对于您的问题,在提交数据后重置会话数组时遇到的问题是由此引起的:

#line 41   $usernames = array();   <--- variable set to an empty array
...
           if($_SERVER["REQUEST_METHOD"] === "POST") {
#line 50       $_SESSION["usernames"] = $usernames; <---- session variable affected with an empty array
               $_SESSION["username"] = $_POST["username"];
...

希望它有所帮助。祝你好运