Как получить cookie в php без обновления страницы?

В настоящее время у меня есть этот код и две проблемы:

Я получаю часовой пояс пользователей с Javascript и отправляю его в timezone.php через ajax, который устанавливает cookie с временем пользователя. Если cookie не установлен, скажите при первом посещении, страница должна быть обновлена, чтобы показать значение cookie. Я делаю это с javascript на данный момент, но должен быть другой способ. Кроме того, поскольку страница обновляется, если нет cookie, пользователи с отключенными cookie получат цикл обновления.

Любые предложения по решению этих проблем?

Благодарю вас, Маркус

index.php:

<!DOCTYPE html> <html> <head> <style> .night { background: #000; color: #fff; } </style> <script src="//ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script> <?php if(isset($_COOKIE["time"])) { $time = $_COOKIE["time"]; if($time < 5.5 || $time > 19) { $night = true; } } else { echo(" <script> var timezone = new Date().getTimezoneOffset()/60; $(document).ready(function() { $.post('timezone.php',{timezone: timezone}, function(data){location.reload(true)}); }); </script> "); } ?> </head> <body class="<?php echo $night ? "night" : "day"; ?>"> <?php if($night) { echo "It's nighttime! ($time)"; } else { echo "It's daytime! ($time)"; } ?> </body> </html> 

timezone.php:

 <?php $timezone = $_POST["timezone"]; if(isset($timezone)) { date_default_timezone_set('Etc/GMT'.($timezone <= 0 ? '' : '+').$timezone); $time = date("G") + (date("i")/60); setcookie("time", $time); } ?> 

Related of "Как получить cookie в php без обновления страницы?"

Вы можете использовать JQuery Plugin https://github.com/carhartl/jquery-cookie и проверить, установлен ли файл cookie в вашем методе $ .post

  $.post('timezone.php',{timezone: timezone}, function(data){ if ($.cookie("time") != null) location.reload(true); }); 

установите класс с помощью JavaScript, сервер не нужен.

PHP-скрипт запускается только при выполнении запроса на сервер. Вы можете использовать JS и AJAX, или, если необходимо, iframe.

вы можете изменить index.php:

  $.post('timezone.php',{timezone: timezone}, function(data){ if(data=='success'){ location.reload(true) } }); 

и в timezone.php:

 <?php $timezone = $_POST["timezone"]; if(isset($timezone)) { date_default_timezone_set('Etc/GMT'.($timezone <= 0 ? '' : '+').$timezone); $time = date("G") + (date("i")/60); setcookie("time", $time); echo "success"; } ?>