Mod rewrite Cookie在一个PHP脚本(从浏览器调用)中可用,但在另一个PHP脚本(从Apache RewriteMap调用)中不可用

Mod rewrite Cookie在一个PHP脚本(从浏览器调用)中可用,但在另一个PHP脚本(从Apache RewriteMap调用)中不可用,mod-rewrite,cookies,lamp,Mod Rewrite,Cookies,Lamp,我正在通过名为scriptlike so的浏览器中的echo检查Cookie变量的可用性 var_dump($_COOKIE); 通过ApacheRewriteMap中的frwite,因为它不能响应任何东西,就像这样 fwrite($fh, var_export($_COOKIE, true)); 还要注意,感兴趣的会话值是从apache传递给脚本的,如下所示 RewriteCond %{HTTP_COOKIE} \bsid=[0-9a-z]{32}\b RewriteRule ^ -

我正在通过名为scriptlike so的浏览器中的echo检查Cookie变量的可用性

var_dump($_COOKIE);
通过ApacheRewriteMap中的frwite,因为它不能响应任何东西,就像这样

fwrite($fh, var_export($_COOKIE, true));
还要注意,感兴趣的会话值是从apache传递给脚本的,如下所示

RewriteCond %{HTTP_COOKIE} \bsid=[0-9a-z]{32}\b
RewriteRule ^   -   [E=SID:%1]
RewriteCond ${prg:%{ENV:SID}} =true

名为script的浏览器显示正确的cookie条目/值,但RewriteMap脚本显示空cookie。我想知道这是否是因为RewriteMap需要它的脚本进入无限循环,等待标准的出现。或者,浏览器脚本使用suPHP,而Apache可能只调用普通的老PHP,这与此有什么关系呢。我仍在调试,可能是我在某个地方出错了,但我想知道这是否完全不同。

不确定这是否相关,但是

我从一个PHP脚本(由AJAX调用)设置了一个cookie,并试图通过Javascript进行访问,但它找不到


原因是我的PHP脚本位于/PHP文件夹中,所以cookie最终位于/root/PHP而不是/root。因此,可能需要检查所有脚本是否都在同一个位置设置和获取cookie:)

结果表明问题是一个不正确的正则表达式。捕获cookie值的行缺少一对参数:

RewriteCond %{HTTP_COOKIE} \bsid=[0-9a-z]{32}\b
因此,匹配的cookie无法访问,我所要做的就是将上面的行更改为

RewriteCond %{HTTP_COOKIE} (\bsid=[0-9a-z]{32}\b)

你能提供一个你是如何设置cookie的例子吗?因为我不确定你在PHP中所说的“文件夹中”(我是cookie noob)是什么意思,设置cookie是这样做的:setcookie(名称、值、过期、路径、域);只需要前两个参数(即名称和值)。检索cookie非常容易-您只需引用变量名,如$\u会话、$\u POST或$\u GET变量:$\u cookie[“name”];然而,困难可能源于Cookie的域和/或路径不同这一事实。我所说的“在文件夹中”是指我的PHP脚本位于public_html(例如public_html/PHP/PHP_script.PHP)下一级的文件夹中。他们创建的任何cookie都会放在那个文件夹中(看起来)。继续…当我试图使用Javascript访问PHP创建的cookies时,JS说它们“不存在”。然而,实际上,当我使用Firefox并点击URL左边的图片时,它显示cookies已经创建,但在不同级别的文件夹中。在任何时候我都没有指定域/路径,也没有尝试将它们放在文件夹中;这只是PHP的默认设置。因此,我建议您检查cookies的域/路径。也许重写脚本正在另一个域/路径中查找。希望这能让它更清楚-我不相信它会:)我在文档根文件夹中设置了cookie,域设置为
.example.com
setcookie('x',0,time()+30*3600,'/','.example.com')
),所以每个子域都可以访问它。你知道我怎样才能找到地图上的文件夹吗?不知道,对不起。这有什么帮助吗?