Сессия теряется после mod_rewrite для динамического .jpg-файла - PullRequest
0 голосов
/ 14 января 2019

Это мой 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'] - session перед загрузкой изображения. Я не знаю почему, но результат всегда ложный и показывает файл «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

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

идентификатор сессии остается прежним.

Так что, похоже, проблема между сессиями и перезаписью модов.

Редактировать # 2:

Теперь я узнал, что когда я вызываю изображение с этим URL

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

и замените .php в параметре get на .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 голосов
/ 14 января 2019

Частичное решение

Вам нужно добавить полный URL в rewriterule:

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

Затем скрипт распознает переменную сеанса. Вы также можете поместить «красивый» (не переписанный) путь к изображению внутри атрибута img-src.

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

НО: если вы откроете изображение в новой вкладке (только изображение), на нем будет отображаться «уродливый» (переписанный) путь

https://abc.de/index.php?image=test.jpg
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...