使用PHP打开图片文件时防止出现新的会话


Prevent new session when opening picture file with PHP

使用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变量在后面的页面中不可用。

但是我通过改变代码执行的方式解决了这个问题。现在,我在域的所有页面中读取wh输入,而不仅仅是在getresolutionpic.php脚本中。我对待getresolutionpic.php就像任何其他php文件在网站上。实际上,getresolutionpic.php只会读取图像文件并将其发送给用户。

希望我讲得够清楚,能对将来遇到同样问题的人有所帮助。