如果用户已登录,如何重定向

时间:2010-12-24 10:02:30

标签: php redirect http-headers

我有一个登录脚本执行此操作:

$_SESSION['username']=$username;

$_SESSION['password']=$password;

如果用户成功登录。 所以我编辑了注册页面来执行此操作:

<?php

function redirect() {
    header(' URL= index.php');
}

?>
<?php session_start(); ?>  

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" id="jmtoday" class=" no_js">
<head>
 <link href='icon.jpg' rel='icon' type='image/jpg'/>
 <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
 <meta http-equiv="Content-language" content="en" />
 <LINK REL=StyleSheet HREF="Mainstyles.css" TYPE="text/css"></link>
 <Title>Sign up | JMToday</title>
</head>
<body>
<?php
  if(isset($_SESSION['username'])){
   redirect();
  }
?> 

但是当我使用我创建的帐户登录时,它不会重定向用户。那是为什么?

5 个答案:

答案 0 :(得分:12)

header(' URL= index.php');

应该是

header ( 'Location: index.php' );

此外,您可能希望在调用die()之后添加header()语句,以便完全停止脚本的执行。

并且您应该将调用移到redirect()以上任何其他输出,因为HTTP标头必须是响应中的第一件事。这可能也是导致问题的原因。

答案 1 :(得分:9)

redirect()功能更改为:

header('Location: index.php');

并将调用移至重定向上方的所有html输出:

<?php session_start();
if(isset($_SESSION['username'])) {
    redirect();
} ?>

来自header() docs

  

请记住,必须调用header()   在发送任何实际输出之前,   通过普通的HTML标签,空白   文件中的行,或PHP中的行。

这最终应该是这样的,接受@ Jan的建议来添加对die()的调用:

<?php
function redirect($DoDie = true) {
    header('Location: index.php');
    if ($DoDie)
        die();
}
php session_start();
if(isset($_SESSION['username'])) {
    redirect();
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" id="jmtoday" class=" no_js">
<head>
 <link href='icon.jpg' rel='icon' type='image/jpg'/>
 <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
 <meta http-equiv="Content-language" content="en" />
 <LINK REL=StyleSheet HREF="Mainstyles.css" TYPE="text/css"></link>
 <Title>Sign up | JMToday</title>
</head>
<body>
?> 

答案 2 :(得分:6)

function redirect() {
    header('location:index.php');
}

答案 3 :(得分:1)

这是header('Location: index.php');

答案 4 :(得分:0)

如果你想立即重定向,那么

function redirect(){
    header("Location: home.php");
}

如果你想延迟重定向,那么

function redirect(){
    header("Refresh: 0;url=default.php");
}

在“刷新:0”中增加0以引入更大的延迟。

在向用户显示一些通知/消息后,您可以使用此方法重定向。

注意如果您在重定向方面遇到一些问题,请在功能结束时输入“exit()”