-2

我正在尝试传递$user_domainlogin.php. 我first_page.phpheader();. 在returning_user.php我设置了一个变量$_SESSION['returning_user'],让我的程序知道在login.php. 如果一切顺利,用户将继续使用login.php. 如果出现问题,用户将被重定向到first_page.php并且必须重新提交表单。我现在面临的问题是,first_page.php当我包含returning_user.phpinside时,用户正在返回login.php。当我删除它时,用户保持打开状态,login.php但似乎if()语句之间的代码没有被执行。我不知道我做错了什么。任何帮助将不胜感激。

first_page.php

//rest of code above
if($stmt){
header("Location: returning_user.php?domain=".$domain."&key=".$key."");
exit;
}

返回用户.php

session_start();
if(isset($_GET['key'])  && isset($_GET['domain']) ){

//get domain variable
$user_domain = $_GET['domain'];

//put key variable in session
$_SESSION['user_domain'] = $user_domain;

//create a returning_user session
$_SESSION['returning_user']="TRUE";

//direct user to login page
header("location:../login.php");
exit;

}else{
 header("location : first_page.php");
 exit;
   }

登录.php

 session_start();
 include 'returning_user.php';

    if(isset($_SESSION['returning_user']) && $_SESSION['returning_user']=="TRUE"){
    //do something amazing here
}

var_dump($_GET)

array(2) { ["domain"]=> string(10) "mydomain" ["key"]=> string(7) "7024158" } 
4

4 回答 4

1

如果domain包含 a ?,它会破坏&key变量。

你应该改变你first_page.php

if($stmt){
    header("Location: returning_user.php?domain=". urlencode($domain)."&key=".$key."");
}
于 2017-10-22T22:01:22.750 回答
1

前:

您的代码有问题,我将尝试解释:

  • 您,用户,在first_page.php.
  • 从那里你被重定向到returning_user.php。GET 值(“域”和“键”)也被传递。
  • returning_user.php读取 GET 值(现在是 SET),将它们写入会话并将您重定向到login.php(也不传递 GET 值)。注意:从技术上讲,您将两个 GET 值传递给页面 ( returning_user.php) 以便将它们保存在会话中。这一步在我看来是不需要的;您可以将它们直接保存在first_page.php.
  • login.php页面returning_user.php中包含。它尝试再次读取 GET 值。但是,因为 GET 值不是 ANYMORE SET,所以您将被重定向到first_page.php.

另一个问题是@MatsLindh 描述的问题。

后:

因此,我对您想要实现的目标提出了一些想法,并提出了以下解决方案:

  • 您,用户,在first_page.php.
  • 您填写表格并提交。
  • 提交后,值“domain”、“key”和“returning_user”被写入 session。
  • 然后你被重定向到login.php.
  • login.php一个名为的文件protector.php中包含。protector.php检查是否设置了会话值“域”和“键”。first_page.php如果没有,则会发生重定向。
  • 如果会话变量的验证protector.php成功,则login.php可以处理进一步的代码。喜欢:阅读会话变量“returning_user”并在那里做一些惊人的事情:-)

笔记:

  • 您可以将protector.php其视为returning_user.php.
  • 您可以包含protector.php在所有需要“保护”的页面中。
  • 我会重命名first_page.phpdashboard.php.
  • first_page.php我实现了一个表单时,为了能够在从另一个页面重定向到的情况下在屏幕上显示某些内容,并在单击按钮时first_page.php启动重定向,例如在表单提交时。login.php

祝你好运!

first_page.php

<?php
session_start();

// Operations upon form submit.
if (isset($_POST['submitButton'])) {
    $stmt = TRUE;
    $domain = 'mydomain';
    $key = '7024158';

    if ($stmt) {
        $_SESSION['domain'] = $domain;
        $_SESSION['key'] = $key;
        $_SESSION['returning_user'] = 1; // Don't use 'TRUE'.

        header('Location: login.php');
        exit;
    }
}
?>
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8" />

        <title>Demo</title>

        <style type="text/css">
            .header, .section { padding: 10px; }
            .header { border-bottom: 1px solid #ccc; background-color: #eee; }
            .section div { padding-bottom: 10px; }
            .section button { padding: 10px; color: #fff; border: none; width: 200px; background-color: #269abc; }
        </style>
    </head>
    <body>

        <header class="header">
            <h3>
                Welcome! You are on the first page ;-)
            </h3>
        </header>

        <section class="section">
            <form action="" method="post">
                <div>
                    Here comes some form content...
                </div>
                <button type="submit" name="submitButton">
                    Submit
                </button>
            </form>
        </section>

    </body>
</html>

保护器.php

<?php

session_start();

// Check domain and key.
if (!isset($_SESSION['domain']) || !isset($_SESSION['key'])) {
    header('Location: first_page.php');
    exit;
}

登录.php

<?php

require_once 'protector.php';

echo 'Page validation successful.';
echo '<br/><br/>';

if (isset($_SESSION['returning_user']) && $_SESSION['returning_user']) {
    echo 'I will do something amazing here...';
}
于 2017-10-24T04:20:24.373 回答
0

当您执行include 'returning_user.php';in 时,将运行中login.php的代码。returning_user.php如果您从顶部遵循该代码路径,您可以看到无论任何参数的内容如何,​​最终结果都是重定向 - 或者到login.php一个目录下(..这些路径看起来很奇怪,因为这意味着login.php你' ve 添加与login.php您将用户重定向到) 或first_user.php.

我不确定您是否真的想要这样做include 'returning_user.php';- 似乎您已经基于该页面上的所有其他内容设置会话,然后将用户重定向到目标,而不是包含文件(以及当它被包含时) ,您正在将变量导入当前范围 - 不需要像这样的会话)。

于 2017-10-23T07:44:22.567 回答
0

我看到你的沮丧。首先,您需要从 Login 中删除 returned_user.php。

然后,在登录时用这个替换你的代码,用这个:

session_start();

if(isset($_SESSION['returning_user'] == "TRUE")){
echo "Success!";
}

另外(这通常是一个不受欢迎的观点),为了避免使用标题,这可能会导致其他地方的其他问题,我更喜欢结束我的 PHP 标记,并放置以下 Javascript

 <script>location.replace("whatever.php");</script>

然后立即拿起我的 PHP 标记。

于 2017-10-23T08:45:34.433 回答