首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对动态.jpg文件执行mod_rewrite后,会话丢失

对动态.jpg文件执行mod_rewrite后,会话丢失
EN

Stack Overflow用户
提问于 2019-01-14 15:07:30
回答 1查看 105关注 0票数 0

这是我的index.php:

代码语言:javascript
复制
<?php

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

 $_SESSION['userisonpage'] = true;

在设置文件中有session_start和一些类似数据库连接的东西:

代码语言:javascript
复制
<?php

 error_reporting(0);

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

 session_start();

现在我有了一个image.php,它在特定的重写规则之后接收GET-Parameter。

代码语言:javascript
复制
RewriteRule ^images/items/(.+)$ /index.php?image=$1 [L,QSA]

到目前一切尚好。然后,image.php会在加载映像之前检查是否设置了$_SESSION‘’userisonpage‘-sessionvariable。我不知道为什么,但结果总是假的,并显示"hotlink.jpg"-file -即使图像是在网页中加载的。

代码语言:javascript
复制
<?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调用图像时

代码语言:javascript
复制
http://abc.de/images/items/test.jpg

当我使用URL调用相同的图像时,会话ID始终是另一个

代码语言:javascript
复制
http://abc.de/?image=test.jpg

会话ID保持不变。

因此,Sessions和Mod重写之间似乎存在问题。

编辑#2:

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

代码语言:javascript
复制
http://abc.de/images/items/test.php // <-- !!! PHP-extension !!!

并将get参数中的.php替换为.jpg

代码语言:javascript
复制
 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)){

它还会根据需要加载会话变量和图像。

EN

回答 1

Stack Overflow用户

发布于 2019-01-14 21:59:18

部分解决方案

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

代码语言:javascript
复制
RewriteRule ^images/items/(.+)$ https://abc.de/index.php?image=$1 [L]

然后,脚本将识别会话变量。您还可以在img-src属性中放入图像的“漂亮”(未重写)路径。

代码语言:javascript
复制
https://abc.de/images/items/test.jpg

但是:如果你在一个新的标签中打开图像(单独的图像),它将显示“丑陋”(重写)路径

代码语言:javascript
复制
https://abc.de/index.php?image=test.jpg
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54177035

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档