代码之家  ›  专栏  ›  技术社区  ›  mattstuehler

提交表单后将用户错误地重定向回PHP页面

  •  0
  • mattstuehler  · 技术社区  · 16 年前

    所有人,

    我有一个PHP页面(“index.php索引)一个非常简单的登录表单(例如用户名和密码)。

    当用户单击“提交”按钮时,表单会将值发布到另一个PHP页面(”登录.php"). 该页应确认用户的凭据,然后执行以下操作:

    • 如果用户的凭据不是 正确,将用户重定向到 消息
    • 如果用户的凭据是 正确,创建会话并将$_session['authenticated']=true,然后将其重定向到“loggedin.php文件"

    [更新]

    然后,就loggedin.php文件,我检查isset($_SESSION['authenticated'])是否返回true。如果是,那就继续。如果没有,则将用户重定向回index.php索引.

    然而,发生了这样的事。这个 第一 背 到index.php索引.

    但是,如果我重新进入 相同的 凭据并提交信息a 时间,一切都会如期而至。

    总之,看起来登录.php不是第一次设置$会话变量,或者它是,但是由于某些原因,当我第一次检查它时没有设置loggedin.php文件

    设置变量之间有延迟吗登录.php,并使isset()返回trueloggedin.php?

    在登录.php:

    session_start();
    $_SESSION['authenticated'] = true;
    header('Location: http://www.mydomain.com/loggedin.php');
    

    在loggedin.php文件:

    session_start();
    $authenticated = $_SESSION['authenticated'];
    if (!isset($authenticated)) {
        header('Location: http://www.footballpoolz.com/mobile/index.php');
        die();
    }
    

    非常感谢您的建议和见解!

    干杯,

    3 回复  |  直到 16 年前
        1
  •  1
  •   stevendesu    16 年前

    我想我可能知道错误的原因。会话必须链接到浏览器和IP地址(这样一次可以登录多个人)。这意味着会话不仅必须存储在服务器端,而且客户机还必须有到会话的链接,以便您知道他们在请求数据时是谁登录的。在所有HTTP请求期间,此会话id作为头的一部分共享。

    不过,当你重定向用户时,你没有给他们发送新邮件头的机会,是吗?你可能只是把新的一页发给他们。这个新页面从未看到它们的头,因此它不知道哪个会话变量(PHP有数百个甚至数千个会话变量)属于它们。当您重新登录 第二次 ,您发送的是一个头,因此您发送的是会话ID,PHP知道哪个会话变量是您的。

    有两种解决方案。首先是找到一种方法来重定向它们,迫使它们发送一个新的头。我相信使用 header("Location: www.mysite.com/newpage.php"); 会的。我可能弄错了。

    另一种方法是在将会话id重定向到loggedin.php文件以便您知道他们是为第一页加载而登录的。在初始页面加载之后,您不再需要执行此额外步骤,因为每次他们请求页面时都会为您执行此步骤。要传递您刚刚附加的会话id ?SID=...

    http://www.php.net/manual/en/session.idpassing.php

        2
  •  0
  •   Brent Baisley    16 年前

    重定向确实会减慢速度并导致额外的服务器负载。你应该做的是把邮件寄回index.php索引页面,它将检测是否有帖子。然后登录并显示loggedin.php文件文件。无需重定向。

    毕竟,您已经知道用户已验证,为什么要将他们重定向到另一个页面,在那里您必须再次检查验证(您刚才做了什么)?这更多的是一个“前控制器”的概念index.php索引充当路由器来加载和显示不同的页面。即使他们登录时只是一个欢迎页面。这就消除了延迟带来的任何问题。

    你正在做一个会话开始,对吗?

        3
  •  0
  •   zod    16 年前

    比如$_SESSION['username']='mattstuehler'

    然后检查

    如果(!空的($loggeduser)

    反正我没看到虫子

    推荐文章