这是一个PHP / Apache问题......
我有以下代码。特别是我想强调一下 以下内容:
// store email in session variable
$_SESSION["jobseeker_email"] = $_POST["jobseeker_email"];
// perform redirect
$target = util_siblingurl("jobseekermain.php", true);
header("Location: " . $target);
exit; /* ensure code below does not executed when we redirect */
这就是问题所在。当我在localhost上执行此代码时它工作正常, 但是当我在远程服务器(这是一个ipage.com托管网站)上执行它时,我 没有得到预期的结果。实际上,当标题(“Location:$ target);部分运行时 我看到一个空白页面(没有重定向)。好像之前正在输出一些东西 对header()的调用,但事实并非如此,因为我已经检查了它。那么为什么不呢 工作
我将非常感谢您对这些问题的任何帮助,因为我需要执行重定向 并且仍然保留来自前一页的会话状态,以及服务器上的所有这些状态 (不只是在localhost上)。
<?php
session_start();
require_once('include/connect.php');
require_once('include/util.php');
util_ensure_secure();
if (isset($_GET['logout'])) {
session_destroy();
// restart session
header("Location: " . util_selfurl(true));
}
function do_match_passwords($password1, $password2) {
return strcmp($password1, $password2) == 0;
}
function valid_employer_login($email, $password) {
global $mysqli;
global $employer_error;
$query = "SELECT passwd FROM Employer WHERE email = '" . $mysqli->escape_string($email) . "'";
$result = $mysqli->query($query);
util_check_query_result($query, $result);
$invalid_credentials = false;
if ($result->num_rows == 0) {
$invalid_credentials = true;
} else {
$row = $result->fetch_assoc();
$retrieved_password = $row["passwd"];
if (!do_match_passwords($password, $retrieved_password))
$invalid_credentials = true;
}
if ($invalid_credentials) {
$employer_error = "Invalid credentials.";
return false;
}
return true;
}
function valid_jobseeker_login($email, $password) {
global $mysqli;
global $jobseeker_error;
$query = "SELECT passwd FROM JobSeeker WHERE email = '" . $mysqli->escape_string($email) . "'";
$result = $mysqli->query($query);
util_check_query_result($query, $result);
$invalid_credentials = false;
if ($result->num_rows == 0) {
$invalid_credentials = true;
} else {
$row = $result->fetch_assoc();
$retrieved_password = $row["passwd"];
if (!do_match_passwords($password, $retrieved_password))
$invalid_credentials = true;
}
if ($invalid_credentials) {
$jobseeker_error = "Invalid credentials.";
return false;
}
return true;
}
if (isset($_POST["employer_submitted"])) {
global $error;
// check whether specified username and password have been entered correctly
if (valid_employer_login($_POST["employer_email"], $_POST["employer_password"])) {
// store email in session variable
$_SESSION["employer_email"] = $_POST["employer_email"];
// perform redirect
$target = util_siblingurl("jobseekermain.php", true);
header("Location: " . $target);
exit; /* ensure code below does not executed when we redirect */
}
}
if (isset($_POST["jobseeker_submitted"])) {
global $error;
// check whether specified username and password have been entered correctly
if (valid_jobseeker_login($_POST["jobseeker_email"], $_POST["jobseeker_password"])) {
// store email in session variable
$_SESSION["jobseeker_email"] = $_POST["jobseeker_email"];
// perform redirect
$target = util_siblingurl("jobseekermain.php", true);
header("Location: " . $target);
exit; /* ensure code below does not executed when we redirect */
}
}
?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Work Net: Sign In</title>
<link href="css/style.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="container">
<h1>Work Net: Sign In</h1>
<div id="content">
<ul>
<li>
<h2>Employers</h2>
<p><a href="accountcreate.php?accounttype=employer">Create new employer account.</a></p>
<form method="post" action="<?php util_selfurl(true); ?>">
<table>
<tr>
<td>E-mail:</td>
<td><input type="text" name="employer_email" value="<?= htmlentities(util_setvalueorblank($_POST['employer_email'])); ?>" />
</tr>
<tr>
<td>Password:</td>
<td><input type="password" name="employer_password" value="<?= htmlentities(util_setvalueorblank($_POST['employer_password'])); ?>" /></td>
</tr>
</table>
<?php if (isset($employer_error)) echo "<p style=\"color: red;\">" . htmlentities($employer_error) . "</p>"; ?>
<input type="hidden" name="employer_submitted" />
<input type="submit" value="Sign In" />
</form>
<p><a href="forgottenpassword.php?accounttype=employer">Forgotten Employer Password.</a></p>
</li>
<li>
<h2>Job Seekers</h2>
<p><a href="accountcreate.php?accounttype=jobseeker">Create new job seeker account.</a></p>
<form method="post" action="<?php util_selfurl(true); ?>">
<table>
<tr>
<td>E-mail:</td>
<td><input type="text" name="jobseeker_email" value="<?= htmlentities(util_setvalueorblank($_POST['jobseeker_email'])); ?>" />
</tr>
<tr>
<td>Password:</td>
<td><input type="password" name="jobseeker_password" value="<?= htmlentities(util_setvalueorblank($_POST['jobseeker_password'])); ?>" /></td>
</tr>
</table>
<?php if (isset($jobseeker_error)) echo "<p style=\"color: red;\">" . htmlentities($jobseeker_error) . "</p>"; ?>
<input type="hidden" name="jobseeker_submitted" />
<input type="submit" value="Sign In" />
</form>
<p><a href="forgottenpassword.php?accounttype=jobseeker">Forgotten Job Seeker Password.</a></p>
</li>
</ul>
</div>
<div id="footer">
<p>
<?php include('markup/footer.php'); ?>
</p>
</div><!-- end #footer -->
</div><!-- end #container -->
</body>
</html>
答案 0 :(得分:0)
没有看到util_siblingurl()的代码,我的猜测是你的问题是一个路径问题。 util_siblingurl()函数和Apache设置的组合可能导致路径不一致。
例如,在localhost上,您可能会被重定向到http://example.com/some/path/to/jobseekermain.php,而在远程主机上,您可能会被重定向到http://example.com/some/different/path/to/jobseekermain.php
你看到白屏而不是404这一事实让我对这个假设有些犹豫,但看到该功能的代码仍然会有所帮助。
答案 1 :(得分:0)
我可能会做两件事来找出问题所在:
这是一个示例脚本:
<?php
session_start();
// I added the require just to make sure nothing is being printed there
// (an error for example)
require_once('include/connect.php');
require_once('include/util.php');
header("Location: " . SOME_LOCATION);
exit;
?>
当然有一些网页在你重定向到它时打印好了......
答案 2 :(得分:0)
我相信您的代码没有问题。实际上,像托管系统一样的ipage会导致一些问题。我也使用了ipage托管计划并面临同样的问题。
所以伙计,试着找一个比这更好的托管服务器。
由于
答案 3 :(得分:0)
我遇到了同样的问题。 Ipage托管,重定向不起作用,服务器报告已经发送了标头。原来这个问题有空白。
确保<?php code ?>
标记之外没有空格或任何其他字符。在重定向之前的所有文件中,在开始标记之前和结束标记之后手动选择和删除所有内容。