Php isset $ _GET无法按预期工作

时间:2017-10-22 21:53:48

标签: php session-variables getvalue

我试图将$user_domain传递给login.php。我从first_page.php获得header();的值。在returning_user.php我设置了一个变量$_SESSION['returning_user'],让我的程序知道在login.php中要做什么。如果一切顺利,用户将继续login.php。如果出现问题,用户将被重定向到first_page.php并且必须重新提交表单。我现在面临的问题是当我在first_page.php中加入returning_user.php时,用户将返回login.php。当我删除它时,用户仍然在login.php,但似乎if()语句之间的代码没有被执行。我不知道自己做错了什么。任何帮助将不胜感激。

first_page.php

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

returning_user.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;
   }

的login.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 个答案:

答案 0 :(得分:1)

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

您应该将first_page.php更改为

if($stmt){
    header("Location: returning_user.php?domain=". urlencode($domain)."&key=".$key."");
}

答案 1 :(得分:1)

<强> BEFORE:

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

  • 您(该用户)位于first_page.php
  • 从那里,您将被重定向到returning_user.php。 GET值(“domain”和“key”)也被传递。
  • returning_user.php读取GET值(现在为SET),将它们写入会话并将您重定向到login.php(没有传递GET值)。 注意 :从技术上讲,您将两个GET值传递给一个页面(returning_user.php),以便将它们保存在会话中。我认为这一步不需要;您可以直接在first_page.php
  • 中将它们保存在会话中
  • login.php页面中包含returning_user.php页面。它试图再次读取GET值。但是,因为GET值不是任何设置,所以您被重定向到first_page.php

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

<强> AFTER:

所以我对你想要达到的目标给出了一些想法,我得到了以下解决方案:

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

备注:

  • 您可以将protector.php视为returning_user.php的替换者。
  • 您可以在需要“受保护”的所有网页中加入protector.php
  • 我会将first_page.php重命名为dashboard.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>

protector.php

<?php

session_start();

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

的login.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...';
}

答案 2 :(得分:0)

window中执行include 'returning_user.php';时,login.php中的代码会运行。如果您从顶部开始遵循该代码路径,您可以看到,无论任何参数的内容如何,​​最终结果都是重定向 - 向returning_user.php目录向下(...这些路径看起来很奇怪,因为表示您添加的login.php与您将用户重定向到login.php的{​​{1}}不同。

我不确定你真的想做login.php - 看来你已经基于该页面上的其他内容设置会话,然后将用户重定向到目的地,而不是将文件包含在内(当它被包含在内时,你将变量导入当前范围 - 不需要像这样的会话。)

答案 3 :(得分:0)

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

然后,在登录时用以下代码替换您的代码:

session_start();

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

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

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

然后立即选择我的PHP标签。