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

Sam*_*ril 6 php redirect http-headers

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

$_SESSION['username']=$username;

$_SESSION['password']=$password;
Run Code Online (Sandbox Code Playgroud)

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

<?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();
  }
?> 
Run Code Online (Sandbox Code Playgroud)

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

Jan*_*čič 12

header(' URL= index.php');
Run Code Online (Sandbox Code Playgroud)

应该

header ( 'Location: index.php' );
Run Code Online (Sandbox Code Playgroud)

此外,您可能希望die()在调用后放置一个语句,header()以便完全停止脚本的执行.

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


mar*_*cog 10

redirect()功能更改为:

header('Location: index.php');
Run Code Online (Sandbox Code Playgroud)

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

<?php session_start();
if(isset($_SESSION['username'])) {
    redirect();
} ?>
Run Code Online (Sandbox Code Playgroud)

来自header()文档:

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

这是最终应该看起来的样子,采用@ 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>
?> 
Run Code Online (Sandbox Code Playgroud)

  • 也许你可以将`$ DoDie`参数传递给`redirect()`函数.Anways,我从未遇到过我进行重定向并希望在此之后执行某些代码的情况.但那只是我:) (2认同)

Sha*_*ngh 6

function redirect() {
    header('location:index.php');
}
Run Code Online (Sandbox Code Playgroud)