当前位置:  开发笔记 > 编程语言 > 正文

在.htaccess中获取PHP会话变量

如何解决《在.htaccess中获取PHP会话变量》经验,为你挑选了2个好方法。

是否可以读取Apache中.htaccess文件中的php $ _SESSION数组中的数据?所以说我有以下内容:

$_SESSION['foo'] = 'bar';

我可以在.htaccess做类似的事情:

RewriteRule bla.png folder/{the php session var foo}/file.png

那可能吗?

我已经有了一个可行的解决方法,但如果可行的话,它会更好.



1> jave.web..:
回答主要问题:

不,至少不像你想象的那样.调用该文件是.htaccess因为它们是"分布式配置文件",当然配置&& 访问处理必须首先发生 - 因此,您无法获得"PHP会话变量",因为它只是在处理之后才会出现.htaccess

我将在下面向您展示一些解决方法,但在此之前 - 您应该注意这一点:

这真的有必要吗? - 建议的解决方案

如果你只想重新定位文件路径/由登录用户 - .htaccess不是方式 - 使用bla.php地址然后在PHP文件中做重定向 - 这样的事情:


但是,如果您无法更改源URL,您首先必须重定向bla.pngbla.php但我猜您知道如何做到这一点:-)

在使用MPV/MVC模型的框架中,通常存在用于"路由"的脚本 - 例如这个.
您可以选择使用此脚本创建一个"php-router",添加一些其他依赖PHP的重定向,同时使用if/elseif/elsecase选择将要发生的重定向 - 重定向将在哪里.

要么

你可能正在使用会话 - 所以为什么不直接在PHP中生成url:
$url = "example.com/bla.png?foo=".$_SESSION['foo'];+ regexp in .htaccess或者甚至:
$url = "example.com/folder/".$_SESSION['foo']."/file.png";
无论如何我猜你是重定向因为你不能(出于某种原因)这样做.:-)

解决方法

如果你仍然相信你必须在.htaccess文件中执行此操作,这里有一些解决方法

1)使用cookies

在现代,cookie通常是可用的,因此如果您"信任"您的客户端的cookie,您可以基于HTTP_COOKIE服务器变量制定重定向规则- 假设您之前存储了名为" foo"的cookie :

RewriteCond %{HTTP_COOKIE} ^(.*)foo=([-_a-zA-Z0-9]+)(.*)$ [NC]        
RewriteRule ^bla.png$ /folder/%2/file.png [R=307,NC,L] 
#possibly use 302 if you like dinosaurs

正如您所看到的,技巧是HTTP_COOKIE为某些条件创建条件检查服务器变量.它基本上说:

是否有名为"foo"的COOKIE仅包含" - ,_,小写或大写字母或数字"?
如果是这样 - 重定向example.com/bla.pngexample.com/folder/CURRENT_FOO_VALUE/file.png

[flags]:307重定向(R = 307),不介意字母大小写(NC),不要申请其他规则(L)

好的一点是HTTP_COOKIE服务器变量的结构是这样的:

name=value; name2=value2

2)不推荐 - 其他解决方法:

a)HTTP_SESSION使用mod_session 读取环境变量的会话

有关如何将会话读入env的更多信息,请参阅mod_session的apache手册HTTP_SESSION.变量.那么方法将与"COOKIE-workaround"相同.

b)将所需信息存储在文本文件中,并使用RewriteMap@Chris建议的指令读取它

但是你会再次以某种方式检测出哪个'foo'可能SSL_SESSION_ID或其他一些$_GET/$_POST参数?



2> benlumley..:

我不知道它可能.

但我可以想到一些涉及重写PHP脚本的变通方法.


是的,重写为PHP脚本,让PHP输出PNG.
推荐阅读
mobiledu2402851173
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有