PHP: «На сайте слишком много переадресаций» при использовании сеансов php со временем

У меня проблема при использовании этого кода на моей странице:

Код с истечением срока действия

<?php session_start(); if(!isset($_SESSION['clientmacs']) ) { header('Location: index.php'); } else { if(time() - $_SESSION['timeLogin'] > 1800) { header('Location: include/logout.php'); } $userclient = $_SESSION['clientmacs']; ?> <html> HTML CODE </html> <?php } ?> 

Но если я использую этот код, проблема исчезает, и страница работает нормально:

Код без истечения срока действия

 <?php session_start(); if(!isset($_SESSION['clientmacs'])) { header('Location: index.php'); } else { $userclient = $_SESSION['client'];; ?> <html> HTML CODE </html> <?php } ?> 

Ошибка в Google Chrome:

 This webpage has a redirect loop Http://localhost/mac/index.php The website has too many redirects. The incidence may be resolved by deleting the cookies from this site or allowing third party cookies. If that fails, the incidence may be related to a bug in the server configuration, not the computer. 

Solutions Collecting From Web of "PHP: «На сайте слишком много переадресаций» при использовании сеансов php со временем"

Вам необходимо сбросить значение $ _SESSION для таймаута ($ _SESSION ['timeLogin']) при выполнении перенаправления, иначе, когда клиент вернется из перенаправления, значение в сеансе будет одинаковым и будет перенаправлено снова.

Вы можете решить это с помощью:

 if(!isset($_SESSION['clientmacs']) ) { $_SESSION['clientmacs'] = ""; // add this line if not added somewhere else header('Location: index.php'); } 

а также

 if(time() - $_SESSION['timeLogin'] > 1800) { $_SESSION['timeLogin'] = time(); // add this line header('Location: include/logout.php'); } 

Возможно (в зависимости от вашей логики) лучше очистить весь сеанс, и пусть он будет перенастроен через обычный поток ( session_destroy() ) при выполнении перенаправления.

вот что вам нужно добавить

 if(!isset($_SESSION['clientmacs'])) { $_SESSION['clientmacs'] = 'something' // or it will redirect forever; header('Location: index.php'); } 

Ваш выход будет перенаправлен на ваш индекс, где он снова проверит условие

if(time() - $_SESSION['timeLogin'] > 1800)

Это будет верно и отправит его обратно на выход, и так далее и т. Д. Вам нужно изменить yoiur $ _SESSION ['timeLogin'], иначе вы никогда не нарушите этот цикл.

Попробуйте вычислить разницу во времени вне оператора IF.

например

 $difference = time() - $_SESSION['timeLogin']; if($difference > 1800){ //Do Something }