【问题标题】:Keeping forward slashes in cookie PHP在 cookie PHP 中保留正斜杠
【发布时间】:2023-03-20 18:42:02
【问题描述】:

我正在构建一个登录页面。现在,我使用 cookie 的页面有一个过期时间。我希望网站在他们再次登录后重定向回他们所在的页面。

为此,我使用了一个 cookie,其中存储了页面的名称(例如 queue.php),它会将它们取回。

如果我要访问同一目录中的页面,此方法非常有效,但如果我想返回子目录(例如 Deployment/deployment.php),则它不起作用。

我已经尝试用 urlencode()、反斜杠、addslashes()、%2F 代替正斜杠,但似乎没有任何效果。

这就是我设置 cookie 的方式:

$url_name = "Deployment/deployment.php";
setcookie("url",$url_name);

任何帮助将不胜感激,我完全迷路了。

【问题讨论】:

    标签: php cookies setcookie slash


    【解决方案1】:

    setrawcookie() 似乎是您要使用的功能。根据php.net,它与setcookie()完全一样,只是它不做任何urlencoding。

    【讨论】:

      【解决方案2】:

      我不知道你的登录页面在哪里,但如果Deployment 是一个子目录(所以在主文件夹下一层)你应该在它前面添加一个正斜杠,如下所示:

      $url_name = "/Deployment/deployment.php";
      setcookie("url", $url_name);
      

      【讨论】:

        【解决方案3】:

        也许你可以base64_encode()这个值然后base64_decode检索它?只是一个。不过,我不知道为什么不允许使用正斜杠。也许其他人可以启发我!

        【讨论】:

          【解决方案4】:

          你能再解释一下你的问题吗?我刚刚尝试了以下方法,并且能够很好地检索 cookie 的值:

          <?php 
          $url = "http://google.com/mail";
          echo "Setting cookie with value " . $url . "</br>";
          setcookie("url", $url);
          echo "The cookie is: " . $_COOKIE['url'] . "</br>";
          ?>
          

          【讨论】:

          • 这行不通。脚本初始化完成后,php 不会触及超全局变量。新的 cookie 只会在下一页加载时显示在 cookie 中。同样,您在 setcookie 调用之前有一个回显,因此所有这些都会产生“标头已发送”错误,并且无法设置 cookie。
          • 对,您必须刷新页面才能获取 cookie 的值。另外,我在发布之前测试了代码,没有出现“标头已发送”错误。
          • @Marc B:也许他在 PHP 的 ini 配置中将 output_buffering 设置为 TRUE;这不会导致“标头已发送”错误。
          【解决方案5】:

          究竟是什么不起作用?如the manual中所述:

          请注意,cookie的值部分会在你发送cookie时自动进行urlencode,收到时会自动解码并分配给与cookie名称同名的变量。

          因此无需手动编码/解码。我不认为$url_name 中的斜线是问题所在。我怀疑您重定向到的路径不正确,但如果没有更多代码,我无法检查。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2022-11-25
            • 1970-01-01
            • 2011-05-18
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多