如果会话存在重定向到其他页面PHP

时间:2015-10-10 14:27:22

标签: php session redirect

我有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';?>

2 个答案:

答案 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文件
<?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();
?>