在php会话变量中设置javascript变量

时间:2014-01-06 10:04:23

标签: javascript php ajax

我想根据用户浏览器时间设置php会话$_SESSION['time']

 // gives time difference between utc time and current user local time
var offset = ((new Date().getTimezoneOffset()) * -1) * 60;

我希望将此偏移值存储在像

这样的会话变量中
$_SESSION['time'] = offset ; // something like this

实施例

 <script type="text/javascript">
   I have to set the $SESSION['time'] variable at the beginning of page
   so that i can use it down the dom
 </script>
 <span class="time_stamp"><?php echo $_SESSION['time'];?></span> 

1 个答案:

答案 0 :(得分:0)

在服务器上的页面加载时创建php会话。 所以在页面加载后有没办法来创建会话。

因此,如果您不想使用ajax,则只有一个/ 2解决方案。

解决方案1 ​​

sess.php

<?php
 session_start();
 $_SESSION['time']=$_GET['time'];
?>

JS

head.appendChild(document.createElement('script')).src='sess.php?time='+offset;

注意:在这种情况下,head只是一个参考。

<强> BUT

这也是异步。

再次如此。页面加载后无法设置会话。

解决方案2

使用gd预加载php输出的图像,同时设置你的会话。 ;)

如果你想知道我怎么看它。(这会导致一个自然的页面加载&amp;也会在ie6上大量工作)我只是不记得究竟如何在身体之前预先加载图像


前段时间我遇到了同样的问题......我使用了ajax。

function ajax(a,b,c){ // Url, Callback, just a placeholder
 c=new XMLHttpRequest;
 c.open('GET',a);
 c.onload=b;
 c.send()
}
function LoadThePage(){
 //just some milliseconds passed.
 //session is set
 //load the rest of your page.
 //MOST OF THE TIME this loads faster than the body does.(window.onload)
}
ajax('sess.php?time='+offset,LoadThePage);

另一方面......现在大多数现代浏览器都支持localstorage。

所有手机&amp;现代浏览器。

如果我存储这样的东西。为什么要使用php会话?

使用localstorage来替换它。

window.localStorage['offset']=((new Date().getTimezoneOffset()) * -1) * 60;