【发布时间】:2016-02-12 19:40:43
【问题描述】:
我有一个奇怪的情况,当我早上重新打开 Firefox 时,页面上出现 PHP 错误,因为使用了会话变量但未定义。
浏览器设置为重新打开打开的选项卡,生成页面输出的 PHP 脚本以 require_once 开头,该脚本被调用以确保会话已启动并为站点设置会话变量。
白天这工作得很好,但是早上第一件事,当我重新打开浏览器并单击选项卡时,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。
【问题讨论】:
-
好吧,你能把你正在使用的代码贴出来吗?猜错很难解决
-
你保持什么条件来测试会话?我的意思是,检查
if isset($_SESSION) && $_SESSION !='') -
我“预计”每次加载页面时都会执行 thissite.php,但如果在重新加载浏览器后单击选项卡,似乎不会。也许即使会话已经过期,页面仍然打开的事实不会导致 thissite.php 再次被执行?
标签: php session session-variables session-cookies