2016-02-12 5 views
0

У меня странная ситуация, когда я снова открываю Firefox утром, я получаю ошибки PHP на странице, потому что переменные сеанса используются, но не определены.require_once action при повторном открытии браузера (Firefox?)

Браузер настроен на повторное открытие вкладок, которые были оставлены открытыми, а скрипт PHP, который генерирует вывод страницы, начинается с require_once, вызываемый сценарий обеспечивает запуск сеанса и установку переменных сеанса для сайта.

В течение дня это прекрасно работает, однако, утром утром, когда я снова открываю браузер и нажимаю на вкладку, выражения «2», которые обрабатывают ошибки сеанса, вызывают ошибки, поскольку эти переменные сеанса не определены.

Они «безоговорочно» определены в сценарии 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; 
} 

Часть ofsite.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 не определен.

+1

Ну, пожалуйста, разместите код, который вы используете? Трудно решить ошибки, угадывая –

+2

. Какое условие вы проверили для проведения сеансов? Я имею в виду, что '' if isset ($ _ SESSION) && $ _SESSION! = '') '' – Tarunn

+0

Я «ожидаю», что thissite.php будет выполняться каждый раз, когда страница загружается, но, похоже, это не так, после того, как браузер был перезагружен.Возможно, хотя срок действия сессии истек, тот факт, что страница по-прежнему открыта, не приводит к тому, что thissite.php будет выполнен снова? –

ответ

1

Обычно сеанс php имеет продолжительность жизни 1440 секунд (24 минуты). Если сеанс не обновляется в течение этого периода времени (например, при загрузке/перезагрузке веб-страницы), все переменные сеанса будут удалены.

Чтобы посмотреть, сколько времени на вашем сервере, посмотрите на значение ini session.gc_maxlifetime.

echo ini_get(session.gc_maxlifetime'); 

или

phpinfo(); 

И искать session.gc_maxlifetime.

1

Если вы используете файлы cookie для хранения переменных сеанса, проверьте их продолжительность жизни. Один из способов преодоления этой ситуации - обновить эти файлы cookie в pageload, если переменные на стороне сервера не истекли. Второй способ - продлить срок хранения файлов cookie при хранении.

+0

В этом случае мы используем переменные сеанса PHP, но мы также используем файлы cookie. Я замечаю (по крайней мере, с Firefox и Chrome), что, если у меня есть браузер, который будет открыт с вкладками с последнего времени, даже если большинство файлов cookie для нашего сайта определяются как сеансовые куки, они по-прежнему остаются заданными день за днем. –

+1

Вам необходимо сопоставить клиент с переменными сервера, чтобы упростить безопасность сеанса. Не доверяйте куки. Но не избегайте их использования. Возможно, использование токена сеанса поможет их сопоставить. И как только один из файлов cookie или сеансов сервера истек, заполните друг друга оставшимися данными. Вы пытались получить доступ к «оставшимся» файлам cookie с сервера? Это может дать подсказку о том, в чем проблема. –

+0

Я попытался проверить другие переменные сеанса, некоторые вроде бы существуют. Пока страница выполняет «thissite.php» при загрузке, это должно гарантировать, что есть сеанс и инициализация ключевых переменных. Проблема в том, что вкладка остается открытой, на следующее утро, когда я открываю браузер, похоже, что она не выполняет ее, поэтому сеанс не проверяется. Я добавлю «echo» на «thissite.php», чтобы увидеть, выполнено ли это или нет. –

Смежные вопросы