0

我有一个 php 页面(index.php),其中在验证用户名和密码后将设置一个会话($_SESSION['expire']),该会话将在 30 分钟后过期并取消设置(按下登录按钮后 30 分钟)并将我们再次重定向到 index.php:

header('location:index.php');

验证后,将在索引页面中显示一个菜单,其中一项是 ContentManager.php。如下图通过点击此项我们将连接到db并进入contentmanager.php

switch($_REQUEST['action'])
{
case 'ContentManager' : 
include('model/content.php');
$contents = getContent($conn);
include('view/contentmanager.php');
break;
}

在 ContentManger.php 我有:

<?php
//if the session is not unset and expired yet
    if ( isset($_SESSION['expire']) && ($now<= $_SESSION['expire']))
{   
?>
do sth...

<?php
}
else
{
//unset the session and redirect to index.php again
unset($_SESSION['expire']);
session_destroy(); 
header('location:../index.php');}
?>

这很好用,但问题是经过 30 分钟后,我必须按两次“ContentManager”才能重定向到 index.php 如果我只是按一次它会显示一个空白页面。但是通过第二次刷新页面,它将再次重定向到登录页面(index.php)。

请帮我...

4

3 回答 3

1

检查标题包含之前的间距。重定向时可能会导致错误。另一种解决方案是检查输出缓冲 是否将输出缓冲设置为off 或 on。要检查这个到你的服务器 php.ini 文件并检查输出缓冲。如果它关闭然后设置它,如果你没有多余的编辑 php.ini 文件你也可以在这个输入以下代码 <?php ob_start();?> 你必须写这个每个页面的代码并关闭输出缓冲 类型<?php ob_end_flush();?>

于 2015-07-09T22:37:36.730 回答
0

这是因为您在标题之前输出文本(可能是空行)。在您发布的示例中,它将在 ?> 和

于 2013-02-09T16:47:03.997 回答
-1

我认为这将解决:

<?php
//if the session is not unset and expired yet
    if ( isset($_SESSION['expire']) && ($now<= $_SESSION['expire'])):
?>
do sth...

<?php
else {
//unset the session and redirect to index.php again
unset($_SESSION['expire']);
session_destroy(); 
header('location:../index.php');}

endif
?>
于 2015-07-14T13:52:30.140 回答