Невозможно получить массив из cookie при загрузке страницы после перезаписи URL в htaccess с использованием php - PullRequest
0 голосов
/ 06 сентября 2018
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)
{
}

это условие не оценивается как истинное.

1 Ответ

0 голосов
/ 06 сентября 2018

Убедитесь,

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.

Cookies устанавливаются и читаются так называемыми header полями. Они должны быть отправлены перед любым выводом.

Даже пробел перед открывающим тегом php может привести к сбою. даже если это пространство в файле вы «включаете» перед вызовом функции setcookie.

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

Если вы не видите пробела, у вас может быть поле спецификации UTF8 в начале вашего php-документа. Рекомендуется установить в текстовом редакторе другую текстовую кодировку, например, ANSI, чтобы можно было редактировать спецификацию UTF8, чтобы вы могли удалить ее, а затем сохранить и вернуться к UTF8 без спецификации.

Кроме того, убедитесь, что вы установили cookie на весь свой домен. Если вы не укажете это, тогда файл cookie будет прочитан только на той странице, на которой он был установлен.

Также не забудьте установить время истечения, в этом случае я установил время 5 минут, после которого срок действия файла cookie истечет.

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

Кроме того, подумайте, почему вы храните идентификатор отчета в виде ключа массива и значения ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...