我有index.php和home.php页面。 index.php就像登陆页面,但如果用户登录或者会话存在,我想将他从index.php重定向到home.php,如果他试图访问index.php。而重定向代码的一部分是在header.php中,它是home.php和index.php中包含的代码的一部分。问题是我认为我陷入了重定向循环,ERR_TOO_MANY_REDIRECTS
这是我得到的错误。我想我需要说,如果这是home.php停止重定向,但我不知道该怎么做
这是我在header.php中的代码
<?php include('database.php');
session_start();
if(isset($_SESSION['id'])) {
header('Location: home.php');
exit();
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<link rel="stylesheet" href="css/bootstrap.min.css">
<link rel="stylesheet" href="css/bootstrap-theme.min.css">
<link rel="stylesheet" href="css/style.css">
</head>
<body>
home.php代码
<?php include('header.php'); ?>
<?php include('nav.php'); ?>
<?php include('footer.php'); ?>
index.php代码
<?php include 'header.php';?>
<?php include 'nav.php';?>
//Some code not relevant to question
<?php include 'footer.php';?>
答案 0 :(得分:2)
正如许多其他人所说,你最终陷入无限循环
你可以像这样解决它,定义例如在用户需要登录的页面上的标题之前受限制
home.php:
<?php
define( 'RESTRICTED', true );
require( 'header.php' );
// etc
?>
的index.php:
<?php
require( 'header.php' );
// etc
?>
标题:
include('database.php');
session_start();
if ( defined( 'RESTRICTED' ) ) {
if ( !isset( $_SESSION['id'] ) ) {
header( 'Location: index.php' );
exit();
}
}
else {
if ( isset( $_SESSION['id'] ) ) {
header( 'Location: home.php' );
exit();
}
}
?>
修改强>
为了解决注销问题,使用注销按钮,将它们发送到index.php?logout = true
的index.php
<?php
include('database.php');
session_start();
if ( defined( 'RESTRICTED' ) ) {
if ( !isset( $_SESSION['id'] ) ) {
header( 'Location: index.php' );
exit();
}
}
else {
if ( isset( $_GET['logout'] ) ) {
$_SESSION = array();
}
if ( isset( $_SESSION['id'] ) ) {
header( 'Location: home.php' );
exit();
}
}
?>
编辑2
回复评论,关于如何处理登录用户的示例
在所有限制页面中:
define( 'RESTRICTED', true );
require( 'header.php' );
在您要将用户发送到home.php的所有页面中如果他们已登录:
define( 'SEND_TO_HOME', true );
require( 'header.php' );
的header.php:
<?php
if ( defined( 'RESTRICTED' ) ) {
if ( !isset( $_SESSION['id'] ) ) {
header( 'Location: index.php' );
exit();
}
}
else {
if ( isset( $_GET['logout'] ) ) {
$_SESSION = array();
}
if ( defined( 'SEND_TO_HOME' ) && isset( $_SESSION['id'] ) ) {
header( 'Location: home.php' );
exit();
}
}
?>
答案 1 :(得分:0)
创建一个名为authenticate.php
<?php
if(!isset($_SESSION['id'])) {
header('Location: index.php');
exit();
}
?>
那些需要身份验证的文件包含此文件,就像在主页中使用include('authenticate.php');
一样
在index.php文件中创建一个类似
<?php
<form action="process.php" method="post">
<input type="text" name="username" />
<input type="password" name="password" />
<input type="submit" value="login">
</form>
?>
在process.php
中执行以下操作
<?php
$username = $_POST['username'];
$password = $_POST['password'];
//make authenticate this info to your database if user is valid then redirect to home page
session_start();
$_SESSION['id'] = 1;//here id will be the retrive id from your database
header('Location: home.php');
exit();
?>