再次,非常noob PHP问题。
我有一个非常简单的登录页面
<?php
session_start();
if (isset($_SESSION['username']))
{
header('Location: main.php');
exit();
}
if (isset($_POST['submit']))
{
$user = $_POST['user'];
$pass = $_POST['pass'];
if (try_login($user,$pass))
{
$_SESSION['username'] = $user;
header('Location: main.php');
exit();
}
}
?>
<html> <!-- and login form below... >
还有一个非常简单的主页:
<?php
session_start();
if (!isset($_SESSION['username']))
{
header('Location: .');
exit();
}
?>
<html> <!-- etc, etc -->
我希望发生以下事情:
不幸的是,#2没有发生。我的代码有什么问题?
答案 0 :(得分:3)
您应该使用完全限定的网址:
header('Location: http://localhost/main.php ');
答案 1 :(得分:2)
您必须使用Location: /
或Location: /main.php
等绝对URI。
答案 2 :(得分:2)
您可能会遇到竞争状态。我已经碰到了好几次......你在会话中设置了一些东西,但是下一页看不到它。这通常是由于浏览器如此快速地请求第二页以至于第一页没有时间编写会话 - 所以第二页没有看到会话变量的更改。
在发送重定向标头之前尝试拨打session_write_close()
。
答案 3 :(得分:0)
<?php
session_start();
if (isset($_SESSION['username']))
{
header('Location: main.php');
exit();
}
该人应该如何登录?如果$ _SESSION没有设置用户名 BEFORE ,则会重定向您执行任何实际设置该变量的代码。这使得登录代码无法实现。