Php set cookies не работает

PHP — setcookie(); не работает

Я сделал логин, который устанавливает cookie со значением вменяемого адреса электронной почты, поэтому в глобальном.php-файл, он хранит массив данных пользователей с помощью:

cookie не устанавливается, я знаю это, потому что я сделал тестовый файл:

просто пустая страница.

код входа (где установлен файл cookie):

4 ответов

вы должны установить cookies до все заголовки отправляются.

setcookie () определяет файл cookie для отправки вместе с остальными заголовками HTTP. Как и другие заголовки, куки должны быть отправлены до любого вывода из скрипта (это ограничение протокола). Это требует, чтобы вы размещали вызовы этой функции до любого вывода, включая и теги, а также любые пробел.

это означает, что вам нужно будет заглянуть в буферизация вывода если вы хотите использовать этот код как есть.

в зависимости от содержания global.php этот может работа для вас. Все, что я сделал, это удалить любой вывод до setcookie() называется. Если global.php содержит любые пробелы или вывод HTML в нем, это не будет работать:

просто хотел отметить, у меня была проблема с setcookie не работает. Когда я исследовал файл был в кодировке UTF-8 с BOM. Когда я перекодировал его как UTF-8 без BOM setcookie работал нормально, поэтому BOM был написан до того, как мой первый тег php был обнаружен. Я думаю, что включение буферизации в моем php.ini-файл, вероятно, тоже исправлю.

кто-то может в конечном итоге найти эту информацию полезной.

У меня была еще одна проблема с обновлением cookie с помощью функции setcookie.

поэтому я установил строку cookie из массива с помощью функции сериализации php. С этого момента я не смог обновить, что функция cookie — setcookie просто не работает, wheather устанавливает сериализованную строку или любую другую простую строку.

затем я установил другой файл cookie с новым ключом cookie, на этот раз данные были закодированы с помощью функции json_encode. На этот раз я смог установить cookie и обновите его: -)

У меня была такая же проблема и оказалось, что это было вызвано тем, что домен, который я проходил в функции другой порт (что не допускается).

Источник

Почему мои куки не устанавливаются?

У меня есть следующая функция PHP:

И тогда я получаю печенье:

echo $_COOKIE[‘username2’]; exit();

(Я только положил exit() в целях отладки)

Единственная проблема, это выходит пустым. Есть идеи?

ОБНОВИТЬ:
Вот как называется функция:

Я не включил все if() заявления, чтобы сэкономить место.

Решение

попробуйте добавить путь = /, чтобы файл cookie работал со всем сайтом, а не только с текущим каталогом (который раньше меня поймал)

также убедитесь, что файл cookie выводится первым
как советовали в руководстве по php (это меня уже застало врасплох)

Как и другие заголовки, куки должны быть отправлены до любого вывода из вашего
скрипт (это ограничение протокола).

Другие решения

Почему у вас возникла эта проблема

Проблема заключается в том, что setcookie () не устанавливает куки немедленно, он отправляет заголовки, поэтому браузер устанавливает куки. Это означает, что для текущей загрузки страницы setcookie () не будет генерировать $_COOKIE ,

Когда браузер позднее запрашивает страницу, он отправляет куки в заголовках, чтобы PHP мог получить их в виде $ _COOKIE.

Просто, старый решение

О решениях, очевидных:

Я создал класс, Cookie , которая решает проблемы, которые разделяют setcookie () и $ _COOKIE:

Тогда вы можете использовать это так:

И, конечно, вы должны передать это. Гораздо лучше, чем глобальные.

Вот общий синтаксис setcookie

Посмотрите на третий аргумент, если вы не установите его, скрипт перенесет его в текущий рабочий каталог. Так что если вы установили cookie без указания пути в a.com/b/setcookie.php cookie не будет доступен для a.com/checkcookie.php , Что вы делаете, это установка cookie в подпапку и перенаправление в родительскую папку, посмотрите на ../ где это не доступно, следовательно, проблема. Как этого избежать? Обычная процедура — указать путь, который / , в вашем случае запас / как четвертый абзац Пятый аргумент для вашего куки-файла установит его безопасность. http://www.php.net/setcookie есть больше объяснений. Это должно исправить вашу проблему. Установка пути к домену domain.com , сделает файл cookie доступным для всех domain.com но не для something.domain.com , Установите значение домена в .domain.com посмотрите на точку, предшествующую domain.com, сделайте ее доступной через anything.domain.com , НТН!

Думаю, я бы добавил еще одну возможную причину, по которой cookie может не устанавливать или показывать случайное функциональное поведение.

Следующий случай может быть применим к некоторым программистам, имеющим, как представляется, иллюзорную проблему с настройками файлов cookie в результате неправильного использования header_remove ();

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

Вы можете обнаружить, что ваш файл cookie внезапно работает по неизвестной причине:

При первом запуске вы устанавливаете cookie и вообще не вызываете header_remove (). Затем при втором запуске вы вызываете header_remove (), вы обнаружите, что ваш cookie теперь всегда установлен.

То же самое применимо и в том случае, если вы попытаетесь изменить значение cookie перед header_remove (), вы снова потерпите неудачу, потому что он уничтожит изменения, которые вы пытаетесь внести, прежде чем они будут фактически буферизованы для пользователя.
Вы должны установить куки и любые другие заголовки по этому вопросу после header_remove (), а не до.

Если вы использовали header_remove () для намерения изменить иерархию кодов ответов HTTP для сценариев DOM, вы можете быстро разрешить этот конфликт стирания заголовка файла cookie, используя следующее для явной очистки только кодов ответов:

Это требует, чтобы вы вызывали эту функцию до любого вывода, включая и теги, а также любые пробелы.

Источник

Php set cookies не работает

Добрый день! Вот решил поделиться своим открытием насчёт функции Setcookie в PHP. При генерации страницы мне нужно чтобы у клиента установился определённое значение в cookie. Поковырявшись с Setcookie и убедившись что оно не работает, я обычно бросал это неблагодарное дело и пользовался JavaScript`ом, однако если у клиента отключены скрипты, то такой фокус не прокатит. Так почему же Setcookie не работает?

В основном это две причины: очевидная и не очень.

Очевидная причина:

Как пишут нам в инструкции cookie должны передаваться до того как будут выведены какие-либо другие данные скрипта (это ограничение протокола). Это значит, что в скрипте вызовы этой функции должны располагаться прежде остального вывода, включая вывод тэгов и , а также пустые строки и пробельные символы.

Да, это очень важное замечание, поскольку, проигнорировав его, вы получите сообщение об ошибке следующего содержания: Cannot modify header information — headers already sent by (output started at. Типа невозможно изменить заголовки страницы, так как они уже были отправлены.

В той же инструкции приведён пример использования функции Setcookie на PHP:

Однако, выполнение такого php-скрипта на сервере — привело к ошибкам:

Warning: Cannot modify header information — headers already sent by (output started at Z:\. \test.php:1) in Z:\. \test.php on line 4

Warning: Cannot modify header information — headers already sent by (output started at Z:\. \test.php:1) in Z:\. \test.php on line 5

Warning: Cannot modify header information — headers already sent by (output started at Z:\. \test.php:1) in Z:\. \test.php on line 6

Как же так. Ведь это пример с официального сайта! Вот тут-то виновата вторая — не очевидная причина.

Не очевидная причина:

Очень просто — кодировка php-файла должна быть UTF-8 без BOM

Источник

PHP – setcookie() not working

I have this page that sets a cookie and echos out a string if you check a checkbox. The string prints correctly, but the cookie never gets set and I have no idea why.

Does anyone know why the above code does not work?

3 Answers 3

PHP superglobals are populated at script start-up time, and then are NOT modified or touched by PHP again for the life of the script. That means $_COOKIE represents the cookies that were sent to the server in the http request that fired up the script. It will NOT show any cookies you’ve added/changed/deleted during the life of the script. Those changes will only show up on the NEXT request.

The only exception to this is $_SESSION , which is populated when you call session_start() .

If you need those values to be in $_COOKIE immediately, you’ll have to add them manually, e.g.

If output exists prior to calling this function, setcookie() will fail and return FALSE. If setcookie() successfully runs, it will return TRUE. This does not indicate whether the user accepted the cookie.

In other words, the function setcookie() is not working because it is inside the page. If you want it to work, you will need to put that function before the page, specifically before any headers.

Do this:

Cookies don’t kick in until after they are set and a new page request is sent. This is because cookies are sent with page requests, they just don’t magically appear to a the server.

Your solution is to do a page refresh after setting the cookie.

Источник

Php set cookies не работает

Здесь могла бы быть ваша реклама

Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006
Откуда: Israel

Секрет
Теперь, когда вы уже наверняка второпях отправили свой запрос,
я расскажу вам простой секрет, который сэкономит вам уйму ожиданий,
даже если первый ответ по теме последуем сразу же.

Само собой я знаю что ответят мне тут же, и если я посмотрю
на сообщения на форуме, то пойму что в общем то я и не ошибаюсь.
Но еще я точно замечу, что очень мало тем, в которых всего два ответа :
вопрос автора и еще два сообщение вида Ответ + Спасибо

После этого приходится начинать уточнять этим неграмотным что мне надо.
Они что, сами читать не умеют? А уточнять приходится.
И иногда пока они переварят то что я им скажу проходит и не одна ночь..

Уверен что если бы я им сказал что у меня есть
фиолетовый квадрат, и нужно превратить его в синий треугольник
и я пытался взять кисточку, макнуть в банку и поводить ей по квадрату
но почему то кисточка не принимала цвет краски в банке,
то на мой вопрос — где взять правильные банки мне бы ответили гораздо быстрее
предложив её открыть, а не тратить еще стольник на жестянку.

Поэтому с тех пор я строю свои вопросы по проверенной давным давно схеме:
Что есть
Что нужно получить
Как я пытался
Почему или что у меня не получилось.

На последок как оно происходит на форумах

Новичок: Подскажите пожалуста самый крепкий сорт дерева! Весь инет перерыл, поиском пользовался!
Старожил: Объясни, зачем тебе понадобилось дерево? Сейчас оно в строительстве практически не используется.
Новичок: Я небоскрёб собираюсь строить. Хочу узнать, из какого дерева делать перекрытия между этажами!
Старожил: Какое дерево? Ты вообще соображаешь, что говоришь?
Новичок: Чем мне нравиться этот форум — из двух ответов ниодного конкретного. Одни вопросы неподелу!
Старожил: Не нравится — тебя здесь никто не держит. Но если ты не соображаешь, что из дерева небоскрёбы не строят, то лучше бы тебе сначала школу закончить.
Новичок: Не знаите — лучше молчите! У меня дедушка в деревянном доме живёт! У НЕГО НИЧЕГО НЕ ЛОМАЕТСЯ.
Но у него дом из сосны, а я понимаю, что для небоскрёба нужно дерево прочнее! Поэтому и спрашиваю. А от вас нормального ответа недождёшся.
Прохожий: Самое крепкое дерево — дуб. Вот тебе технология вымачивания дуба в солёной воде, она придаёт дубу особую прочность:
Новичок: Спасибо, братан! То что нужно.

Отредактировано модератором: Uchkuma, 26 Апреля, 2011 — 10:21:12

Источник

Читайте также:  Не работает холодильник бош не морозит
Оцените статью