如何在不刷新页面的情况下在PHP中获取cookie?

时间:2012-11-10 23:37:35

标签: php javascript ajax cookies time

我目前有这个代码和两个问题:

我使用Javascript获取用户时区并通过ajax将其发布到timezone.php,后者根据用户时间设置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);
}

?>

4 个答案:

答案 0 :(得分:1)

使用JavaScript设置类,不需要服务器。

答案 1 :(得分:1)

你可以使用JQuery插件https://github.com/carhartl/jquery-cookie并检查你的$ .post方法中是否设置了cookie

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

答案 2 :(得分:0)

PHP脚本仅在向服务器发出请求时运行。您可以使用JS和AJAX,或者,如果合适,可以使用iframe。

答案 3 :(得分:0)

你可以改变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";
}

?>