在使用php在htaccess中重写url后,无法在页面加载时从cookie中检索数组

问题描述 投票:0回答:1
Options +FollowSymLinks -MultiViews
RewriteEngine on
RewriteBase /roots_web/

RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]

RewriteRule ^contact-us.html/$ contact-us.php
RewriteRule ^contact-us.html$ contact-us.php

我正在设置cookie:

 setcookie("reports_cookie[".$report_id."][report]", $report_id);

当我去其他页面检查

if(isset($_COOKIE['reports_cookie']) && count($_COOKIE['reports_cookie'])>0)
{
}

它没有评估这个条件是真的。

php .htaccess cookies
1个回答
0
投票

确保

setcookie("reports_cookie[".$report_id."][report]", $report_id, time()+3600,"/");

在浏览器输出完成之前使用。

例如

<html>
 <head>
    <title>
      hello world
    </title>
 </head>
 <?php
   setcookie("reports_cookie[".$report_id."][report]", $report_id, time()+3600,"/");
 ?>
</html>

会使它失败,因为html输出将在cookie标头之前发送。

Cookie由所谓的header字段设置和读取。这些需要在任何输出之前发送。

甚至在打开php标签之前的空间也会使其失败。即使在调用setcookie函数之前你在“包含”文件中的那个空格。

 <?php setcookie("reports_cookie[".$report_id."][report]", $report_id, time()+3600,"/");
^-- a space making your cookies fail

如果您没有看到空格,则可能在php文档的开头有一个UTF8 BOM字段。建议将文本编辑器设置为另一种文本编码,如ANSI,以便能够编辑UTF8 BOM,以便您可以删除它,然后将其保存并恢复为不带BOM的UTF8。

另外,请确保在整个域中设置cookie。如果您未指定,那么cookie只能在其设置的页面上读取。

还记得设置一个到期时间,在这种情况下,我设置一个5分钟的时间,之后cookie将过期。

 setcookie("reports_cookie[".$report_id."][report]", $report_id, time()+3600,"/");

另外,请考虑为什么将报告ID存储为数组键和值...

© www.soinside.com 2019 - 2024. All rights reserved.