【问题标题】:PHP - Maintain Session Array Between PagesPHP - 维护页面之间的会话数组
【发布时间】:2015-07-04 20:28:45
【问题描述】:

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

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

我可以注册,但我认为每次返回主页时,用户名数组都会刷新以包含 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>

【问题讨论】:

  • 你自己调试过吗?预计提问者所做的不仅仅是将一堵代码墙粘贴到问题中。如果您看到一个特定的、可重现的问题,您可以将其简化为以前没有被问过的最小示例,那么就是提出问题的时候了。 Stack Overflow绝不应该是您首先尝试的地方。
  • 感谢您提供的所有有用信息。是的,我已经完成了调试,但我是 PHP 新手,不太确定发生了什么。我在这个论坛上发帖是希望得到指导,而不仅仅是被告知要“更加努力”。
  • 您可能需要阅读the how to ask guide 了解更多信息。
  • 我可能是错的,但是从您的介绍解释来看,并且没有查看您的代码,您似乎完全偏离了您想要做什么的主题。每个“已连接”用户都存在一个会话(即使它不是真正的连接),您可以在其中保存有关 连接的数据,以及您为其服务的连续页面。另一方面,您谈到连续用户的登录:这意味着它将存在与用户一样多的不同会话!会话不是保存和检索关于几个用户的数据的地方。对于你想要的,使用数据库表。

标签: php arrays session


【解决方案1】:

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

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

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

#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"];
...

希望对您有所帮助。祝你好运

【讨论】:

    猜你喜欢
    • 2012-08-01
    • 2017-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-19
    • 2017-02-08
    相关资源
    最近更新 更多