1

使用 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();

并跟踪用户,由 mysql 数据库创建用户 ID 并存储在 $_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'];

问题是当 getresolutionpic.php 被调用时,$_SESSION['userid']它是空的,并且将创建一个新的用户 ID,而用户实际上并不是新用户。

你知道哪里出错了吗?

4

2 回答 2

0

我认为导致此问题的错误是我使用http://mywebsite.com/etc .. 而不是http://www.mywebsite.com/etc .. 所以$_SESSION在前者中创建的变量不可用在后面的页面中。

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

希望我已经足够清楚,可以对将来面临同样问题的人有所帮助。

于 2014-08-25T17:27:23.963 回答
0

尝试这个:

<script language="JavaScript">
window.onload = function() {
    document.getElementById("mypictureid").src = "http://www.mywebsite.com/getresolutionpic.php?w=" + screen.width + "&h="+screen.height;
</script>

这在加载主页之前不会尝试加载图像,并且应该在那时设置会话cookie。

于 2014-07-05T07:51:21.433 回答