为什么输出不存在的图像会完全删除会话

时间:2015-05-21 22:34:46

标签: php image session

我正在开发一个大型网站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图像占位符正在弄乱会话管理和磁盘文件,这真的很奇怪。

1 个答案:

答案 0 :(得分:0)

我无法在Linux服务器上重现这个问题(因为大多数生产网站都是这样),所以如我的问题所述,像我这样的环境有一个解决方法似乎涵盖了大多数情况。因此,我认为,出于实际目的,如果这只是我的安装或更常见的Windows问题,那么进一步的利益可以忽略不计。 感谢您对此问题的所有意见。