动态.jpg文件的mod_rewrite后会话丢失

时间:2019-01-14 07:07:30

标签: php session

这是我的index.php:

<?php

 require_once('includes/settings.php');
 require_once('includes/functions/images.php');

 $_SESSION['userisonpage'] = true;

在“设置”文件中,有session_start和一些类似数据库Connection的内容:

<?php

 error_reporting(0);

// ini_set('session.gc_maxlifetime', 180);

 session_start();

现在我有一个image.php,它在特定的重写规则之后会收到GET参数。

RewriteRule ^images/items/(.+)$ /index.php?image=$1 [L,QSA]

到目前为止,一切都很好。然后image.php在加载图像之前检查是否设置了$ _SESSION ['userisonpage']-sessionvariable。我不知道为什么,但是结果始终为false,并且即使在网页中加载了图片,也会显示“ hotlink.jpg”文件。

<?php

 if(isset($_GET['image'])){

  $path = '/data/web/123456/html/abc/images/';
  $file = trim($_GET['image']);

  if(file_exists($path.'items/'.$file)){

   if($_SESSION['userisonpage'] === true){

    echo file_get_contents($path.'items/'.$file);

   }else{

    echo file_get_contents($path.'hotlink.jpg');

   }

  }else{

   header('location: https://abc.de/');

  }

  die;

 }

?>

编辑#1

好吧,我发现当我用URL调用图像

http://abc.de/images/items/test.jpg

当我使用URL调用同一张图片时,会话ID总是另一个。

http://abc.de/?image=test.jpg

会话ID保持不变。

所以在Sessions和Mod Rewrite之间似乎是个问题。

编辑#2:

我现在发现,当我使用此URL调用图像

http://abc.de/images/items/test.php // <-- !!! PHP-extension !!!

并将get-parameter中的.php替换为.jpg

 if(isset($_GET['image'])){

  $path = '/data/web/123456/html/abc/images/';
  $file = trim($_GET['image']);
  $file = str_replace('.php', '.jpg', $file); // <-- replace the extension

  if(file_exists($path.'items/'.$file)){

它还会按需加载会话变量和图像。

1 个答案:

答案 0 :(得分:0)

部分解决方案

您需要在重写器中添加 完整 URL:

RewriteRule ^images/items/(.+)$ https://abc.de/index.php?image=$1 [L]

然后,脚本将识别会话变量。您还可以将“美丽”(未重写)路径放置到img-src-Attribute内部的图像。

https://abc.de/images/items/test.jpg

但是:如果您在新标签页中打开图像(仅图像),它将显示“丑陋”(重写)路径

https://abc.de/index.php?image=test.jpg