2013-08-26 2 views
0

코멘트와 함께 데이터베이스에 저장된 UTC 타임 스탬프를 사용하여 주석 시간이 표시되는 사용자 코멘트 시스템이 있습니다.세션 변수가 실시간으로 작동하지 않습니다.

시간 오프셋은 사용자 로컬 시간을 얻기 위해 javascript post 요청을 사용하여 세션 시간 오프셋 변수를 설정하는 데 사용됩니다.

사용자가 다른 시간대에 있기 때문에 시간을 저장할 수 없기 때문에이 작업을 수행 했으므로 시간대를 혼자서도 사용할 수 없으므로 UTC로 저장 한 다음 시간대의 timeoffset을 사용하여 표시했습니다.

이 시스템은 실시간으로 작동하지 않지만 새로 고침 후에 작동합니다.

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 처음 timeoffset not set 표시하고 후는 의견과 시간을 보여줍니다 새로 고침

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

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

.

가능한 모든 방법을 참조하십시오.

감사합니다.

+0

물론 설정되지 않았습니다. PHP는 응답이 사용자에게 전송되고 자바 스크립트가 실행되기 전에 실행됩니다. 세션을 식별하려고 시도한 후에 jQuery post를 사용하여 세션을 설정한다는 의미입니다. –

+0

@IanBrindley 먼저 응답을 보내는 방법. 코멘트에서 시간의 일부를 새로 고치는 데 아약스 또는 jquery를 사용할 수 없습니다. 그 주위에 어떤 방법이 있나. –

답변

0

PHP 코드는 사용자가 페이지를 표시하기 전에 실행됩니다. 따라서 클라이언트 브라우저에서 실행되는 자바 스크립트 코드 앞뒤에 코드가 있는지 여부는 중요하지 않습니다. 그래서 자바 스크립트와 아약스를 통해 시간을 추가해야합니다. 게시물 요청에있는 alet이 올바른 결과를 제공해야합니다.

+0

예 경고가 올바른 시간 오프셋을 제공하고, 아약스 또는 jquery를 사용하여 댓글에서 시간의 일부를 새로 고칠 수 없다는 점이 다릅니다. 그 주위에 어떤 방법이 있나. –

+0

음, 왜 아약스를 사용하여 페이지의 시간을 새로 고칠 수 없습니까? – benestar

+0

같은 페이지에서 while 루프를 사용하여 주석과 시간이 표시됩니다. –

관련 문제