如果多次刷新页面,为什么PHP会话未设置

时间:2013-12-09 13:21:54

标签: php

这是我检查用户是否登录的代码:

if (!$_SESSION['userInfo']['name'])
{
    Redirect('login.php');
}

以及重定向页面的代码是:

function Redirect($url)
{
    ob_start();
    header('location:'.$url);
    exit;
}

当我按一次刷新按钮时,此代码工作正常,但当我按下刷新按钮多次时,会取消设置会话变量并重定向到登录页面。

我正在使用带有API的代码,需要大约5-10秒来加载页面。如果我在加载之前按下刷新按钮,那么就发生了。

可能有什么问题?

3 个答案:

答案 0 :(得分:0)

尝试使用empty()

进行核对
if (empty($_SESSION['userInfo']['name']))
{
    Redirect('login.php');
}

注意:请确保在登录前未在$_SESSION['userInfo']['name']中设置任何值。登录后,您还必须清除它。

答案 1 :(得分:0)

尝试使用isset()函数(参考:http://www.php.net/isset):

if (!isset($_SESSION['userInfo']['name']))
{
    Redirect('login.php');
}

请确保在有效会话期间不清除$_SESSION变量,并且务必在用户退出时清除它。

也许还在使用:

if (!isset($_SESSION['userInfo']['name']))
{
    header('Location: login.php');
}

答案 2 :(得分:0)

您可能会忽略代码段中的代码,但确定要开始会话吗?

session_start()
if (!isset($_SESSION['userInfo']['name']))
{
    Redirect('login.php');
}