【问题标题】:Why is my PHP page submitting a form through the page that redirected it?为什么我的 PHP 页面通过重定向它的页面提交表单?
【发布时间】:2021-07-14 06:32:46
【问题描述】:

我有一个 index.php 来检查用户是否登录,如果没有,它会将用户重定向到登录页面,如下所示:

<?php 
    session_start();
    $_SESSION["page_identifier"] = "index"; 
    include "inc/header.php"; 

    if(!isset($_SESSION["loggedin"]) OR !$_SESSION["loggedin"] == TRUE){
        echo "ERROR: Not logged in!";
        header("Refresh: 3; url = login.php");
    }
    else{
         ......
    }
?>

这是登录页面。

<?php 
    $_SESSION["page_identifier"] = "login";
    $_SESSION["form_identifier"] = "login";   
    include "inc/header.php"; 
?>
    <div>
        <form action="submission.php" name="login" method="POST">
            <input class="textBox" type="text" name="username" placeholder="Enter your username" maxlength="20"/>
            <input class="textBox" type="password" name="password" placeholder="Enter your password" maxlength="20"/><br><br>
            <input class="button" type="submit" value="Submit"/>
        </form>
        <form class="register" action="register.php">
            <input class="button" type="submit" value="New user? Register"/>
        </form>
    </div>
<?php include "inc/footer.php"; ?>

每个页面都将$_SESSION["form_identifier"]设置为其页面名称,当提交表单时,我会检查提交文件的来源,如下所示:

<?php
    session_start();
    $_SESSION["page_identifier"] = "submission";
    
    //checking if the form is a login form.
    if($_SESSION["form_identifier"] == "login"){
        .......
    }

它表明from来自“NULL”而不是来自“login”。为什么会发生这种情况,有没有办法改变这种情况?

【问题讨论】:

  • 您似乎忘记在登录页面顶部输入session_start();
  • 附言。只是一个提示,如果用户在浏览器的多个选项卡中打开您的网站,然后在它们之间不断切换,则将页面标识符放入会话中会导致意外行为和可能的错误 - 这是很常见的行为。这些选项卡将共享同一个会话,因此很容易看到服务器上可能会混淆请求实际上来自哪个页面。浏览器的使用不一定是一个线性过程。
  • 嗯,具体细节取决于一点点。您的网站是否有任何公共页面,或者除了登录页面之外都是私有的?在哪些情况下您实际上需要知道您来自来自的页面/URL(而不是现在正在处理的页面/URL)?根据我对这类事情的经验,有必要知道登录页面的 URL,以便在加载登录页面时,代码不会出现“用户未登录,重定向到登录页面”,并且从而创建一个无限循环...
  • ...您需要知道现在在哪个页面上的唯一其他时间是某些页面是私有的,而某些页面是公开的,所以再次,您可以决定如果用户未登录是否需要重定向。这可以通过列出需要用户登录的页面及其 URL 的列表(在文件或数据库中)来实现。或者您将代码放入每个检查的页面中,但是您通常最终会得到冗余代码 - 最好集中它。
  • 是的,这确实是正确的方法。

标签: php forms redirect


【解决方案1】:

ADyson 在 cmets 中回答了这个问题,我忘了输入“session_start();”在登录页面中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-01
    • 2018-10-31
    • 2021-12-03
    • 1970-01-01
    • 2017-07-29
    • 2021-03-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多