登录成功后重定向到新页面

Posted

技术标签:

【中文标题】登录成功后重定向到新页面【英文标题】:Redirecting to a new page after successful login 【发布时间】:2013-02-12 00:03:31 【问题描述】:

我确信这个问题之前已经被问过,但我已经彻底寻找答案但无济于事。 (我见过的唯一答案涉及 ajax)但我只使用 javascriptphphtml

我有一个 login.php 页面,并且我已经创建了一个 HTML 页面,该页面将在用户成功登录后立即成为登录页面。我该怎么做?

下面是我的登录页面代码和登录后的登陆页面调用transfer.html:

LOGIN.PHP

  <div id="content">
     <h3>Login to Internet Banking</h3>
     <form id="login" action="" method="post">
        <p>
          <label for="userid">UserID:</label>
          <input type="text" name="UserID" id="UserID"/>
        </p>
        <p>
          <label for="PIN">PIN:</label>
          <input type="password" name="PIN" id="PIN" />
        </p>

        <p>
          <input type="submit" name="btnSend" value="Login" class="submit_button" />

        </p>
      </form>
      <td>&nbsp;</td>
 <p>
        Not yet registered?
 <a href="registration.php">Click here to register</a>
 </p>

  <div id="wrap">
        <!-- start PHP code -->
        <?php

            mysql_connect("localhost", "root", "") or die(mysql_error()); // Connect to database server(localhost) with UserID and PIN.
            mysql_select_db("registrations") or die(mysql_error()); // Select registration database.

            if(isset($_POST['name']) && !empty($_POST['name']) AND isset($_POST['PIN']) && !empty($_POST['PIN']))
                $UserID = mysql_escape_string($_POST['name']);
                $PIN = mysql_escape_string(md5($_POST['PIN']));

                $search = mysql_query("SELECT UserID, PIN, active FROM users WHERE UserID='".$UserID."' AND PIN='".$PIN."' AND active='1'") or die(mysql_error()); 
                $match  = mysql_num_rows($search);

                if($match > 0)
                    $msg = 'Login Complete! Thanks';
                else
                    $msg = 'Login Failed!<br /> Please make sure that you enter the correct details and that you have activated your account.';
                
            


        ?>
        <!-- stop PHP Code -->
        <?php 
            if(isset($msg)) // Check if $msg is not empty
                echo '<div class="statusmsg">'.$msg.'</div>'; // Display our message and add a div around it with the class statusmsg
             ?>

    </div>
        </div>

【问题讨论】:

你真正想要什么? 看看header() 欢迎来到 Stack Overflow!请不要使用mysql_* 函数编写新代码。它们不再维护,社区已经开始deprecation process。看到red box?相反,您应该了解prepared statements 并使用PDO 或MySQLi。如果你选择 PDO here is a good tutorial. 首先,您应该在
标记中指定 ACTION 值,该值是将您登录的页面。另一件事是,如果您有 .html 文件,肯定可以绕过您的登录.php 并直接打开 .html 页面。第三件事是我不知道你的 PHP 代码要做什么,可能你应该把你的 HTML 部分带到第一个站点,然后把这个 PHP 代码带到其他进行日志记录的 php 页面。
【参考方案1】:

试试 header("Location:home.php");而不是显示 $msg = '登录完成!谢谢'; 希望对你有帮助。

【讨论】:

这行不通,因为无法在 php 脚本的任何输出之前设置标头。 把你的 php 脚本放在 if(isset($_POST['btnSend']) && $_POST['btnSend']=='Login') 这个代码下。 再一次,应该没有输出。文件的第一行,“”已经是一个输出,所以所有的标题都应该在该行之前设置。 然后使用您的完整网站网址,例如 header("Location:website.com/home.php"); 希望它会工作。 请阅读php.net/manual/ru/function.header.php 了解什么是标题以及如何使用它们。你放什么链接都没有关系,问题是如果你之前有一个输出字符,你就不能设置任何标题。这不起作用: "test " ; 而这会: "test"【参考方案2】:

您需要将location标头设置如下:

header('Location: http://www.example.com/');

当然用你的着陆页的网址替换http://www.example.com

在您完成用户登录的地方添加。

注意:重定向时用户会立即被重定向,因此您的消息可能不会显示。

此外,您需要将 PHP 代码移动到文件顶部才能使此解决方案正常工作。

另一方面,请参阅我上面关于使用已弃用的mysql 语句的评论,并考虑使用更新、更安全和改进的mysqliPDO 语句。

【讨论】:

【参考方案3】:

首先,将所有 PHP 代码移到顶部。没有它,我下面的代码将无法工作。

要进行重定向,请使用:

header('Location: http://www.example.com/');

另外,请考虑我的建议。由于这不是今天的第一个问题,而且您的所有问题都与基础有关,因此您应该考虑阅读一些不错的 PHP 书籍以了解其工作原理。

您可以在此处找到免费书籍的有用链接: https://***.com/tags/php/info

【讨论】:

【参考方案4】:

使用 php 代码生成的 Javascript 重定向:

 if($match > 0)
     $msg = 'Login Complete! Thanks';
     echo "<script> window.location.assign('index.php'); </script>";
 
 else
     $msg = 'Login Failed!<br /> Please make sure that you enter the correct  details and that you have activated your account.';
 

仅限 PHP 重定向:

<?php
    header("Location: index.php"); 
    exit;
?>

【讨论】:

您的回答对我的项目来说是一份神圣的礼物。谢谢你好先生! 这个答案有效。使用这种方法有安全问题吗?【参考方案5】:

您还可以在登录后提供指向页面的链接,并在 10 秒后使用 javascript 自动重定向。

【讨论】:

【参考方案6】:

只需在您使用 PHP 代码提供的最后一条消息之后添加以下代码

打印'window.location.assign("index.php")

【讨论】:

这是 php 还是 javascript ?你能检查一下语法吗? 这个问题在三年前得到了回答并被接受。你的新答案带来了什么价值?此外,格式不正确,您的代码不是有效的 PHP。【参考方案7】:

可以这样使用

if($match > 0)
 $msg = 'Login Complete! Thanks';
 echo "<a href='".$link_address."'>link</a>";
 
else
 $msg = 'Login Failed!<br /> Please make sure that you enter the correct  details and that you have activated your account.';

【讨论】:

以上是关于登录成功后重定向到新页面的主要内容,如果未能解决你的问题,请参考以下文章

烧瓶如何在ajax调用后重定向到新页面[重复]

如果会话超时,如何在 MVC 中的 jquery ajax 调用后重定向到新页面?

Laravel Ajax登录,成功后重定向到上一个url

登录后重定向到登录页面

CakePHP 登录后重定向到当前页面

django:登录后重定向到引用页面[重复]