会话变量不能实时工作

时间:2013-08-26 09:49:24

标签: php javascript

我有一个用户评论系统,其中使用存储在数据库中的UTC时间戳以及评论显示评论时间。

时间偏移用于使用javascript post request设置会话时间偏移变量以获取用户本地时间。

我这样做是因为用户来自不同的时区而我无法在单独的时区存储时间,所以我将其存储在UTC中,然后使用时区的时间偏移显示。

此系统不是实时工作,而是在刷新后工作。

的comments.php

<?php 
session_save_path('session/store');
session_start();
?>

<script type="text/javascript" src="jquery/jquery.js"></script>
<script type="text/javascript">
var timeoffset = new Date().getTimezoneOffset();

$.post('timeoffset.php', {timeoffset:timeoffset}, function(data){
    //alert(data);
});
</script>

<?php
if(isset($_SESSION['timeoffset'])&&!empty($_SESSION['timeoffset'])){
    date_default_timezone_set('UTC');
    $timeoffset = (int)$_SESSION['timeoffset'];
}
else{
    echo 'timeoffset not set';
    exit;
}

 // here are comments displayed using while loop
 // time of comments is displayed like this
 echo gmdate("F j, Y, h:i:s a", $row['timestamp']-($timeoffset*60)); //$row['timestamp'] = UTC time stamp stored in database. e.g: 1377509788
?>

timeoffset.php

<?php session_save_path('session/store');
session_start();

if(isset($_POST['timeoffset'])){
    $_SESSION['timeoffset'] = (int)$_POST['timeoffset'];
    echo $_SESSION['timeoffset'];
}
?>

首先显示timeoffset not set,然后在刷新后显示评论和时间。

请参阅并建议任何可行的方法。

感谢。

1 个答案:

答案 0 :(得分:0)

PHP代码在用户显示页面之前执行。因此,如果代码在客户端浏览器中执行的javascript代码之前或之后,则无关紧要。所以你必须通过javascript和ajax添加时间。您的帖子请求中的alet应该为您提供正确的结果。