【问题标题】:Cookie available in one PHP script (called from browser) but not another (called from Apache RewriteMap)Cookie 在一个 PHP 脚本中可用(从浏览器调用)但在另一个脚本中不可用(从 Apache RewriteMap 调用)
【发布时间】:2012-04-03 01:33:10
【问题描述】:

我正在通过浏览器中的 echo 来检查 Cookie 变量的可用性,例如这样的脚本

var_dump($_COOKIE);

并通过 Apache RewriteMap 中的 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 有任何关系。我仍在调试,可能是我在某处犯了错误,但我想知道这是否完全不同。

【问题讨论】:

    标签: mod-rewrite cookies lamp


    【解决方案1】:

    不确定这是否相关,但是...

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

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

    【讨论】:

    • 您能否提供一个示例来说明您如何设置 cookie,因为我不确定您所说的“在文件夹中”是什么意思(我是 cookie 菜鸟)
    • 在 PHP 中,设置一个 cookie 是这样完成的: setcookie(name, value, expire, path, domain);只有前两个参数是必需的(即名称和值)。检索 cookie 非常简单 - 您只需引用变量名称,如 $_SESSION、$_POST 或 $_GET 变量:$_COOKIE["name"];然而,困难可能源于 cookie 的域和/或路径不相同的事实。我所说的“在文件夹中”是指我的 PHP 脚本位于 public_html 下一级的文件夹中(例如,public_html/php/php_script.php)。他们创建的任何 cookie 都放在该文件夹中(似乎)。继续...
    • 当我尝试使用 Javascript 访问 PHP 创建的 cookie 时,JS 说它们“不存在”。然而,实际上,当我使用 Firefox 并单击 URL 左侧的图像时,它显示 cookie 已创建但位于不同级别的文件夹中。我从来没有指定域/路径或尝试将它们放在文件夹中;这只是 PHP 的默认设置。因此,我对您的问题的建议是检查 cookie 的域/路径。也许重写脚本正在寻找不同的域/路径。希望这会让它更清楚 - 我不相信它会:)
    • 好吧,我在文档根文件夹中设置了 cookie,并且域设置为 .example.com (setcookie( 'x', 0, time()+30*3600, '/', '.example.com' )),因此每个子域也可以访问它。您知道我如何找出 rewriteMap 正在查看的文件夹吗?
    • 不是真的,抱歉。这有什么帮助吗? stackoverflow.com/questions/8453554/…
    【解决方案2】:

    原来问题是一个不正确的正则表达式。捕获 cookie 值的行缺少一对括号:

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

    因此,匹配的 cookie 无法访问,我所要做的就是将上面的行更改为

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-02
      • 2011-06-01
      • 2022-08-02
      • 2020-03-22
      • 2019-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多