浏览器重新打开时的require_once操作(Firefox?)

时间:2016-02-12 11:12:12

标签: php session session-variables session-cookies

我有一种奇怪的情况,当我在早上重新打开Firefox时,我在页面上遇到PHP错误,因为会话变量被使用但未定义。

浏览器设置为重新打开保持打开的选项卡,生成页面输出的PHP脚本以require_once开头,调用脚本以确保会话已启动并为站点设置会话变量。 / p>

白天工作完美,但是当我重新打开浏览器并单击选项卡时,早上的第一件事,询问会话变量的2“if”表达式会因为没有定义会话变量而抛出错误。

它们是在require_once脚本中“无条件”定义的,所以我假设如果浏览器重新加载页面,则假定脚本已经加载并且没有重新执行,但会话未启动

我找不到任何描述这个问题的相关文章,因为我只能每天“轻松”测试一次,我认为最好问一下大师。

根据要求,添加了示例代码......

主页顶部

// Include Site Configuration And Global Functions
require_once 'thissite.php';

echo <<<HTML

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>My Company - B2B Trade Stockist Sign In</title>
HTML;

include'head.php';

echo <<<HTML

</head>
<body>
<div class="container padding-10" style="text-align:center;">
    etc......

HTML;

head.php的一部分,它输出页头部分

if ($_SESSION['ZEN_DESK'] == "on") {
    echo <<<HTML

<!-- Start of Zendesk Widget script -->
code removed
<!-- End of Zendesk Widget script -->

HTML;
}

控制网站设置的thissite.php的一部分

// Ensure session started
if (!session_id()) {
    session_start();
}

//  Zen Desk:
//      This allows you to control whether Zen Desk is active for a site.
$_SESSION['ZEN_DESK'] = "off";  //(on/off)

在白天的正常情况下,当加载页面时,会定义会话变量ZEN_DESK。但是,如果关闭浏览器并在当天结束时保持打开选项卡,则在早上单击选项卡时,我会记录PHP错误,因为未定义ZEN_DESK。

2 个答案:

答案 0 :(得分:1)

php会话的生命周期通常为1440秒(24分钟)。如果会话未在该段时间内刷新(例如通过加载/重新加载网页),则所有会话变量都将被删除。

要查看服务器上的生命周期有多长,请查看ini值session.gc_maxlifetime

echo ini_get(session.gc_maxlifetime');

phpinfo();

搜索session.gc_maxlifetime

答案 1 :(得分:1)

如果您使用cookie存储会话变量,请检查它们的生命周期。克服这种情况的一种方法是,如果服务器端变量未过期,则在页面加载时刷新这些cookie。第二种方法是在存储时延长cookie的生命周期。