Php isset$\u无法按预期工作

Php isset$\u无法按预期工作,php,session-variables,getvalue,Php,Session Variables,Getvalue,我正在尝试将$user\u domain传递到login.php。我从first_page.phpfromheader()获取值。在returning\u user.php中,我设置了一个变量$\u SESSION['returning\u user'],让我的程序知道在login.php中该做什么。如果一切顺利,用户将停留在login.php。如果出现问题,用户将被重定向到first\u page.php,并且必须重新提交表单。我现在面临的问题是,当我在login.php中包含returnin

我正在尝试将
$user\u domain
传递到
login.php
。我从
first_page.php
from
header()获取值。在
returning\u user.php
中,我设置了一个变量
$\u SESSION['returning\u user']
,让我的程序知道在
login.php中该做什么。如果一切顺利,用户将停留在
login.php
。如果出现问题,用户将被重定向到
first\u page.php
,并且必须重新提交表单。我现在面临的问题是,当我在
login.php
中包含
returning\u user.php
时,用户正在返回到
first\u page.php
。当我删除它时,用户保持在
login.php
上,但是
if()
语句之间的代码似乎没有被执行。我不知道我做错了什么。任何帮助都将不胜感激

first_page.php

//rest of code above
if($stmt){
header("Location: returning_user.php?domain=".$domain."&key=".$key."");
exit;
}
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;
   }
 session_start();
 include 'returning_user.php';

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

//rest of code above
if($stmt){
header("Location: returning_user.php?domain=".$domain."&key=".$key."");
exit;
}
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;
   }
 session_start();
 include 'returning_user.php';

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

//rest of code above
if($stmt){
header("Location: returning_user.php?domain=".$domain."&key=".$key."");
exit;
}
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;
   }
 session_start();
 include 'returning_user.php';

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


如果
包含一个
,它将中断
变量

您应该将
first_page.php
更改为

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

当您执行
时,包括“returning_user.php”
login.php
中,运行
returning\u user.php
中的代码。若您从顶部沿着该代码路径走,您可以看到,不管任何参数的内容如何,最终结果都是重定向到下一个目录(…这些路径看起来很奇怪,因为这意味着您添加的
login.php
与您将用户重定向到的
login.php
first\u user.php
不同


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

我看到了您的沮丧。首先,您需要从登录中删除返回的\u user.php

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

session_start();

if(isset($_SESSION['returning_user'] == "TRUE")){
echo "Success!";
}
另外(这通常是一个不受欢迎的观点),为了避免使用标题,这可能会在其他地方导致其他问题,我更喜欢结束我的PHP标记,并放置以下Javascript

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

然后在之后立即提取我的PHP标记。

之前:

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

  • 您,即用户,位于
    first\u page.php
  • 从那里你被重定向到
    returning\u user.php
    。获取值(“域”和“键”)也被传递
  • returning_user.php
    读取GET值(现在已设置),将它们写入会话,并将您重定向到
    login.php
    (也不传递GET值)。注意:从技术上讲,您将两个GET值传递到一个页面(
    returning_user.php
    )为了在会话中保存它们,我认为不需要此步骤;您可以在会话中直接将它们保存在
    first\u page.php
  • login.php
    中,包含了
    returning_user.php
    页面。它会再次尝试读取GET值。但是,由于GET值不再设置,因此会将您重定向到
    first_page.php
另一个问题是@MatsLindh所描述的问题

之后:

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

  • 您,即用户,位于
    first\u page.php
  • 您填写一份表格并提交
  • 提交后,值“域”、“键”和“返回用户”将写入会话
  • 然后您将被重定向到
    login.php
  • login.php
    中包含名为
    protector.php
    的文件。
    protector.php
    检查会话值“domain”和“key”是否已设置。如果未设置,则重定向到
    first_page.php
  • 如果
    protector.php
    中的会话变量验证成功,则可以处理
    login.php
    中的进一步代码。例如:读取会话变量“returning\u user”,并在那里做一些令人惊奇的事情:-)
注意事项:

  • 您可以将
    protector.php
    作为返回的\u user.php
的替代品
  • 您可以在所有需要“保护”的页面中包含
    protector.php
  • 我会将
    first\u page.php
    重命名为
    dashboard.php
  • first_page.php
    中,我实现了一个表单,以便在从另一个页面重定向到
    first_page.php
    时能够在屏幕上显示一些内容,并在单击按钮(例如表单提交时)时开始重定向到
    login.php
  • 祝你好运

    first_page.php
    那么
    var\u dump($\u GET)是什么呢
    告诉你?我的意见是,
    $domain
    $key
    的值是问题所在。因此,正如@MatsLindh善意地问的那样,你应该向我们提供
    $\u GET
    数组的输出。如果你忽略我们的评论,那么你希望我们如何帮助你?抱歉,但我不相信公认的答案。bot的价值是什么h获取数组/变量?我看到了
    $domain
    $user\u domain
    ,对我来说,这告诉我有些东西定义不正确。我用示例值测试了你的代码,它没有失败。@Fred ii-:测试代码后,你是对的,问题不在return.php,而在login.php
    include(returning\u user.php)中;
    如果这是实际的语法,它会出错,并且会有m