我正在开发一个大型网站php,mysql和js。但是一个特定的脚本会输出包含信息和图像位置的Mysql表,包括图像(如果可用)。图像是可选的。
运行它会删除包括会话文件在内的所有会话信息。
经过长时间的调试(没有错误,警告,通知,萤火虫或debbugin信息给出了一个单一的提示)我发现只有当图像文件名变成“./”时才会发生这种情况。
我通过在输出图像之前检查文件名解决了这个问题。 (但我可以想一想我写的很多脚本都没能检查图像名称。)
尽管如此,这是一种奇怪且不可预测的行为,我希望脚本不会显示任何内容,而是“不存在的图像框......”
没有搜索证明有用。有趣的是,会话删除在调用页面上并不明显,但在下一页中。即使如下所示,在结束脚本之前检查会话。缓存写入我的系统中不允许的磁盘。
在那里我最终编写了一些调试脚本如下...(在第二个脚本中重新读取会话仅用于演示目的,它不是neede,也不影响rtesult,它只是为了表明显然会话还活着。
如何重现:(在Chrome和Firefox上测试)
将这些脚本复制到您的Web服务器中,将图像名称替换为您的一个(可选)并运行“SetSession.php”。一切看起来都不错,但重新加载“CheckSession.php”,你会发现会话信息丢失了,事实上它在第一次运行时已经丢失了,但脚本没有显示...
“SessionSet.php”
<?php
session_start();
if (isset($_POST['SessionData']))
{
$_SESSION['SessionData'] = $_POST['SessionData'] ;
echo "<br> SessionData value: ",$_SESSION['SessionData'];
echo "<br> Check Session <br>";
?>
<form method="get" action="CheckSession.php">
<input type="submit" value="Submit">
</form>
<?php
}
else
{
echo '<br> Will place "SessionData" in $_SESSION["SessionData"] <br>';
?>
<form method="post" action="">
<input type="text" name="SessionData" value="SessionData" />
<input type="submit" value="Submit">
</form>
<?php
}
?>
“CheckSession.php”
<?php
session_start();
// Display all errors
error_reporting(E_ALL);
ini_set("display_errors", 1);
echo "<br>At Script Start <br> Session: <br>", print_r($_SESSION),"<br><br><br>";
// Sample image (>>>Change to an available image in your enviroment<<<)
$ImgThumb ="images/RegAdd.png" ;
// Outputting image
?>
Known Image: <IMG SRC="<?php echo $ImgThumb; ?>" alt="" /></td>
<?php
// checking session values again
echo " <br> After ouputing known image Session: <br>", print_r($_SESSION),"<br><br><br>";
// SECOND ASSIGNMENT Setting image value to offending value (v,gr ./ & /)
$ImgThumb ="./" ;
?>
Unknown image: <IMG SRC="<?php echo $ImgThumb; ?>" alt="" />
<?php
echo "<br>Session Array After outputting $ImgThumb image: <br> ",print_r($_SESSION);
?>
运行第二个脚本(从第一个开始)会产生以下输出:
在脚本开始 会议: 数组([SessionData] =&gt; SessionData)1
已知图片:{image} 在输出已知图像会话后: 数组([SessionData] =&gt; SessionData)1
未知图片: 会话数组输出./ image后: 数组([SessionData] =&gt; SessionData)1
重新加载“CheckSession.php”脚本(如下所示)显示数据会话已丢失,实际上会话已从磁盘中删除。
在脚本开始 会议: Array()1
已知图片:{image} 在输出已知图像会话后: Array()1
未知图片: 会话数组输出./ image后: Array()1
将$ ImageTemp的第二个赋值更改为任何其他东西,现在它可以工作......
有人知道为什么会这样吗?或者这是那些解析器/程序错误。 HTML图像占位符正在弄乱会话管理和磁盘文件,这真的很奇怪。
答案 0 :(得分:0)
我无法在Linux服务器上重现这个问题(因为大多数生产网站都是这样),所以如我的问题所述,像我这样的环境有一个解决方法似乎涵盖了大多数情况。因此,我认为,出于实际目的,如果这只是我的安装或更常见的Windows问题,那么进一步的利益可以忽略不计。 感谢您对此问题的所有意见。