我有一种奇怪的情况,当我在早上重新打开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。
答案 0 :(得分:1)
php会话的生命周期通常为1440秒(24分钟)。如果会话未在该段时间内刷新(例如通过加载/重新加载网页),则所有会话变量都将被删除。
要查看服务器上的生命周期有多长,请查看ini值session.gc_maxlifetime
。
echo ini_get(session.gc_maxlifetime');
或
phpinfo();
搜索session.gc_maxlifetime
。
答案 1 :(得分:1)
如果您使用cookie存储会话变量,请检查它们的生命周期。克服这种情况的一种方法是,如果服务器端变量未过期,则在页面加载时刷新这些cookie。第二种方法是在存储时延长cookie的生命周期。