我试图将$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" }
答案 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
。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
点击一个按钮,例如提交表格。<?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
session_start();
// Check domain and key.
if (!isset($_SESSION['domain']) || !isset($_SESSION['key'])) {
header('Location: first_page.php');
exit;
}
<?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标签。