使用php打开图片文件是在新会话中完成的,我如何防止这种行为?
我把一个javascript在我所有的网页获得屏幕分辨率。下面是javascript代码:
<script language="JavaScript">
document.getElementById("mypictureid").src="http://www.mywebsite.com/getresolutionpic.php?w="+screen.width+"&h="+screen.height;
</script>
和页面的HTML包括:
<img id="mypictureid" src="http://mywebsite.com/otherimage.gif"
和以下php代码将在每个页面加载时执行,将用户数据存储在$_SESSION中。
$some_name = session_name("generalvisit");
session_start();
$_SESSION['entertime']=new DateTime();
和跟踪用户一个userid是由mysql数据库创建并存储在$_SESSION['userid']
if(!is_numeric($_SESSION['userid']) $_SESSION['userid']=getNewUserID();
现在,当getresolutionpic.php
被javascript触发时,存储该用户的屏幕分辨率存储在同一用户的$_SESSION
变量中。在getresolutionpic.php
中我们有:
$some_name = session_name("generalvisit");
session_start();
if(!is_numeric($_SESSION['userid'])
{
$_SESSION['userid']=getNewUserID();
$_SESSION['entertime']=new DateTime();
}
$_SESSION['width']=$_GET['w'];
$_SESSION['height']=$_GET['h'];
问题是,当getresoltionpic .php被调用时,$_SESSION['userid']
是空的,一个新的用户id将被创建,而用户实际上不是新的。
你知道哪里出了问题吗?
试试这个:
<script language="JavaScript">
window.onload = function() {
document.getElementById("mypictureid").src = "http://www.mywebsite.com/getresolutionpic.php?w=" + screen.width + "&h="+screen.height;
</script>
在加载主页之前,它不会尝试加载图像,并且会话cookie应该在那时设置。
我认为我的错误,导致这个问题是,有些地方我使用http://mywebsite.com/etc..而不是http://www.mywebsite.com/etc..因此,在前一个页面中创建的$_SESSION
变量在后面的页面中不可用。
但是我通过改变代码执行的方式解决了这个问题。现在,我在域的所有页面中读取w
和h
输入,而不仅仅是在getresolutionpic.php
脚本中。我对待getresolutionpic.php
就像任何其他php文件在网站上。实际上,getresolutionpic.php
只会读取图像文件并将其发送给用户。
希望我讲得够清楚,能对将来遇到同样问题的人有所帮助。