Этот урок набрал набрал достаточно большое количество
комментариев и дальнейшее его комментирование отключено.
Если вы хотели убедиться в правильности выполнения ДЗ или у вас возник вопрос по уроку,
посмотрите ранее добавленные комментарии, кликнув по кнопке ниже. Скорее всего вы найдете там то, что искали.
Если это не помогло - задайте вопрос в чате в телеграме - https://t.me/php_zone
Всё правильно, куки действительно устаревают спустя 20 секунд от момента начала эпохи unix. Я же не просто так просил ознакомиться с документацией. Почитайте внимательно про параметр expire :)
Сделал всё, как вы сказали, но всё равно выдаёт ошибку Warning: Cannot modify header information - headers already sent by (output started at W:\domains\myproject.loc\www\primer_2.php:1) in W:\domains\myproject.loc\www\primer_2.php on line 2
Вот мой код:
Это куки, которые были запрошены с моего сайта в эти сервисы (скрипты статистики, встроенное видео с ютуба). Просто так нельзя получить куки для другого сайта.
Warning: Cannot modify header information - headers already sent by (output started at W:\domains\myproject.loc\www\index.php:1) in W:\domains\myproject.loc\www\index.php on line 3
В документации третий параметр setcookie($name, $value, $ttl, $path), называется $expire.
"Если указать 0, то cookie будет установлена навсегда (пока её не удалят)" - в документации:
"Если задать 0 или пропустить этот аргумент, срок действия cookie истечет с окончанием сессии (при закрытии браузера)" - не противоречит, но дополняет.
сколько не перезагружаю cookie живы и выводятся, в чем ошибся? в Expires 2018-12-03T22:04:59.363Z
время по серверу 01:01:22 04.12.2018 (date('H:i:s d.m.Y');)
вроде поставил, но я так понял что они в куки даже не попадают,ну по крайней мере когда я делаю вывод куки, то у меня ничего не отображает, хотя даже 20 сек не прошло. но в setCookies в нетворке пишет Set-Cookie: login=admin; expires=Thu, 01-Jan-1970 00:00:20 GMT; Max-Age=0; path=/
Set-Cookie: Password=123; expires=Thu, 01-Jan-1970 00:00:20 GMT; Max-Age=0; path=/
так что думаю что все отработало верно
Expires:"Сессионная" - при $TTL = 0 (время жизни - вся сессия).
Expires:"Thu, 19 Dec 2019 20:19:04 GMT" - при $TTL = Time() +20 (время жизни до указанного времени).
Печенки работают! Стабильно.
Поставил 20 секунд и в Set-Cookie был указан 1970 год =). В файле viewCookie, массив был пустой. Прочитал в документации и задал в $ttl выражение time() + 20 и после этого в массиве появились данные, а после 20 секунд они пропали. Спасибо за урок.
Вот как раз тут и вылезет проблема с кодировкой с bom. Т.к. этот bom будет считаться html выводом и не даст установить куку в через заголовок, потому что он уже будет установлен.
При назначение параметра $tll = 20 в заголовке Set-Cookie появились такие данные: expires = Thu, 01-Jan-1970 00:00:20 GMT (указывается что существует время жизни данного cookie, дата и время жизни, в нашем случае время жизни это 20 сек); Max-Age = 0 (максимальный возраст cookie, в нашем случае это 0) (в итоге + 2 параметра).
Только мне не понятно почему когда я прописываю в параметр $tll просто 20 то cookie не создаются, когда прописываю параметр $tll с помощью time()+$tll то cookie создаются.
Тьфублин))
Долго думал, что же я делаю не так, пока не догадался почитать документацию по setcookie():
expires
Время, когда срок действия cookie истекает. Это метка времени Unix, то есть количество секунд с
начала эпохи. Другими словами, желательно задавать это время с помощью функции time(), прибавляя
время в секундах, через которое срок действия cookie должен истечь.
В итоге, когда выставил setcookie('login', 'admin', time() + 20, '/'), печенька отработала как надо
<?php
setcookie('password', 'name', time() + 20, '/');
setcookie('password', 'name', '', '/');
echo 'Cookie установлено';
Установил cookie, через 20 секунд массив обнулился. Можно удалить cookie с помощью значения с пустой строкой ' '.
Появился такой вопрос, часто бывает, что моя ИДЕ никаких ошибок относительно написанного кода не выдает, а на CZ форма, напротив - выдает, в частности, что "не определена переменная". Нужно как-то поднастроить PHPSTORM, чтобы тоже получать такие ошибки?
И спасибо за уроки.)
В консоли разработчика было следующее:
Set-Cookie: login=admin; expires=Sun, 31-May-2020 23:37:35 GMT; Max-Age=20; path=/
После 20 секунд куки удалилась из массива
Вот что выдалось в консоли.
Set-Cookie: login=admin; expires=Thu, 01-Jan-1970 00:00:20 GMT; Max-Age=0; path=/
После 20 секунд и обновления она исчезла.
Привет, решение первой задачи ( не получается ссылку вставить с решением, только на саму задачу)
<?php
$line = trim(fgets(STDIN));
$nums = explode(' ', $line);
foreach ($nums as $value) {
$one = array_shift($nums);// убираем первый элемент массива
$composition = array_product($nums);// находим произведение всех членов
$arr[] = $composition;// добавляем его в новый массив
$nums[] = $one;// возвращаем 1 член в старый массив в конец
}
$line1 = implode(' ', $arr);
echo $line1;
Привет, Артём. Решила, наконец-то, вторую задачу из урока. Посмотри, не слишком ли громоздкое решение получилось? У тебя оно изящнее и проще. (просто мне надо разобраться в алгоритме) Интересует мнение опытного программиста.)))
<?php
$line = trim(fgets(STDIN));
$nums = explode(' ', $line);
$max = max($nums);// нашли мах значение
$key = array_search($max, $nums);//нашли ключ мах значения
$output = array_slice($nums, $key);// удалили все элементы слева
$min = min($output);//нашли мин значение
$subtraction = $max - $min;
$lastValue = array_pop($nums);
if ($max == $lastValue){
unset ($max);
$max1 = max($nums);
$key1 = array_search($max1, $nums);
$output1 = array_slice($nums, $key1);
$min1 = min($output1);
$subtraction = $max1 - $min1;
}
echo $subtraction;
И поясни, плиз, если не сложно, почему в твоём решении, ты сначала $maxDiff = null, а потом в цикле if ($maxDiff === null)? Как это объяснить? т.е. ты сначала переменной присваиваешь значение null, а потом в цикле говорить: если $maxDiff === null, то .. и дальше идёт какое-то действие. Зачем так делать, ведь мы сами присвоили null переменной? Надеюсь, я понятно выразила свой вопрос?
Не всегда, но бывало. На всякий случай, перед отправкой в задание, проверял в плейграунде. Пару раз помогало избежать простейших синтаксических ошибок.
Они не могут установиться в таком варианте кода. Вы их скорее всего до этого установили нормальным кодом. Куки всегда приходят в заголовке ответа. После отправки тела нельзя отправить заголовки. У вас видимо показ ошибок выключен.
Куки установил таким образом, причем при установке time() + 20 кука заведомо была мёртвой, так как время на компе не соответствовало установленному: вот так.
А также не понял почему у некоторых комментаторов время отображается вот так
Set-Cookie: login=admin; expires=Thu, 01-Jan-1970 00:00:20 GMT; Max-Age=0; path=/
Set-Cookie: Password=123; expires=Thu, 01-Jan-1970 00:00:20 GMT; Max-Age=0; path=/
Значения время выставляю на 0 работает на 20 не работает
хотя во вкладке сеткуки пишется что присутствуют
Set-Cookie: login=admin; expires=Thu, 01-Jan-1970 00:00:20 GMT; Max-Age=0; path=/
Set-Cookie: Password=123; expires=Thu, 01-Jan-1970 00:00:20 GMT; Max-Age=0; path=/
Всё правильно, куки действительно устаревают спустя 20 секунд от момента начала эпохи unix. Я же не просто так просил ознакомиться с документацией. Почитайте внимательно про параметр expire :)
Как там, в 70х поживаете?
Не знаю как лучше так:
Или так:
Хоть как =) Понятно и так и так.
Сделал всё, как вы сказали, но всё равно выдаёт ошибку Warning: Cannot modify header information - headers already sent by (output started at W:\domains\myproject.loc\www\primer_2.php:1) in W:\domains\myproject.loc\www\primer_2.php on line 2
Вот мой код:
Значит что-то выводится перед тем, как вызывается эта функция.
Спасибо большое, оказывается кодировка была не UTF-8.
Такая же ошибка. Несколько часов искал причину, потом решил заглянуть сюда и оопа! Оказывается причина в кодировке.
А почему вашему сайту доступны все мои куки(yandex, mail, vk)? Когда как скажем сайту youtube доступны только youtube.com и googe.com куки?
Это куки, которые были запрошены с моего сайта в эти сервисы (скрипты статистики, встроенное видео с ютуба). Просто так нельзя получить куки для другого сайта.
Понял, спасибо.
Выходит уже описанная ошибка
код
нашел решение
output_buffering = on
Укажите параметр $ttl в функции setcookie равным 20.
Все проверил, отработало через 20 секунд умерла.
Отлично)
В документации третий параметр setcookie($name, $value, $ttl, $path), называется $expire.
"Если указать 0, то cookie будет установлена навсегда (пока её не удалят)" - в документации:
"Если задать 0 или пропустить этот аргумент, срок действия cookie истечет с окончанием сессии (при закрытии браузера)" - не противоречит, но дополняет.
Угу, при этом в современных браузерах понятие "сессии" у каждого своё =)
В файле setCookie установил
В файле getCookie сделал вывод
сколько не перезагружаю cookie живы и выводятся, в чем ошибся? в Expires 2018-12-03T22:04:59.363Z
время по серверу 01:01:22 04.12.2018 (date('H:i:s d.m.Y');)
Потому что этот срок действия для браузера, а не для сервера. Когда подойдет это время на компе пользователя, они удалятся из браузера.
01:01:22 04.12.2018 Так это время у меня и было по факту, а это уже прошло 2018-12-03T22:04:59.363 3 часа назад.
Смотрите наличие куки в браузере (загуглите как). Если они там есть, значит не протухли.
вроде поставил, но я так понял что они в куки даже не попадают,ну по крайней мере когда я делаю вывод куки, то у меня ничего не отображает, хотя даже 20 сек не прошло. но в setCookies в нетворке пишет Set-Cookie: login=admin; expires=Thu, 01-Jan-1970 00:00:20 GMT; Max-Age=0; path=/
Set-Cookie: Password=123; expires=Thu, 01-Jan-1970 00:00:20 GMT; Max-Age=0; path=/
так что думаю что все отработало верно
Потому что вместо 20 нужно написать time() + 20
Спасибо за урок!
Пожалуйста)
Код:
Отлично
Отработала 20 сек и умерла. Второй вариант попробовал, потому что кука висела после урока в браузере. Установил с '-', удалилась.
Ок
Спасибо большое за понятную статью!
Пожалуйста)
Почему при выполнении это кода выдаёт, что масив пустой
Файл COOKIE
Файл setcookie
Может 20 секунд успевает пройти?
Expires:"Сессионная" - при $TTL = 0 (время жизни - вся сессия).
Expires:"Thu, 19 Dec 2019 20:19:04 GMT" - при $TTL = Time() +20 (время жизни до указанного времени).
Печенки работают! Стабильно.
Отлично)
В чем отличие использовать куки или сессию для входа?
Погуглите) Сессии сложнее масштабировать на больших проектах, когда у вас несколько серверов появляется.
Спасибо за урок
куки удалились после установки текущей даты по истечению 20 сек.
для чего используются localStorage и sessionStorage?
как правильно и безопасней реализовать авторизацию пользователей на сайте?
Нет однозначно правильного и безопасного способа. Везде есть потенциальные угрозы.
спасибо за ответ.
Поставил 20 секунд и в Set-Cookie был указан 1970 год =). В файле viewCookie, массив был пустой. Прочитал в документации и задал в $ttl выражение time() + 20 и после этого в массиве появились данные, а после 20 секунд они пропали. Спасибо за урок.
Пожалуйста)
Вот как раз тут и вылезет проблема с кодировкой с bom. Т.к. этот bom будет считаться html выводом и не даст установить куку в через заголовок, потому что он уже будет установлен.
С PHP работа ведется в PhpStorm
При назначение параметра $tll = 20 в заголовке Set-Cookie появились такие данные: expires = Thu, 01-Jan-1970 00:00:20 GMT (указывается что существует время жизни данного cookie, дата и время жизни, в нашем случае время жизни это 20 сек); Max-Age = 0 (максимальный возраст cookie, в нашем случае это 0) (в итоге + 2 параметра).
Только мне не понятно почему когда я прописываю в параметр $tll просто 20 то cookie не создаются, когда прописываю параметр $tll с помощью time()+$tll то cookie создаются.
Меня смущает одно - почему я живу в 1970? :/
Unix-time
И прочитайте про параметр функции в официальной документации.
Хорошо
Я понял почему я живу в 1971 г, теперь меня это не смущает :)
Спасибо)
Прочитал в Manual подробнее о функции setcookie, теперь всё понятно... :)
Молоток)
Тьфублин))
Долго думал, что же я делаю не так, пока не догадался почитать документацию по setcookie():
В итоге, когда выставил setcookie('login', 'admin', time() + 20, '/'), печенька отработала как надо
Дока наше всё
Убедилась)), 'login' => string 'admin' (length=5) пропала
Отлично
Строка пропадает) появляется строка вида expires и время +20 секунд. Читал, что можно использовать функцию time() + 20, как правильнее?
Хотел спросить не по домашке - я захотел установить куки, потом вывести форму для их удаления. Оно правда работает и куки удаляются?
Файл setCookies.php
Файл deleteCookies.php
Спасибо
Именно так и надо.
Удаляются. Только непонятно, для чего вы сделали
перед установкой куки?
У меня после установки $ttl равным 20:
Прочитайте официальную документацию по setcookie :)
Нужно добавлять функцию time() к времени существования куки, иначе ничего не работает. Отсчет начинается 01.01.1970 г. Домашнее задание с подвохом ;)
Верно)
Все работает. Отваливается через 20 секунд.
Отлично!
Отлично
У меня заканчивается срок пользования PHPStorm. Как быть? Дождаться окончания срока и установить новый? Или есть другие варианты?
Можно так, можно поискать EAP версию, можно купить
Отлично
предыдущие задачи решил - есть в коментах,
новые:
https://codingzone.io/problems/11/solution/843
https://codingzone.io/problems/12/solution/1278
Для чего в первом решении ksort?
не нужен ksort(
1 задача
https://codingzone.io/problems/11/solution/1794
Сутки над ней тарахтел.
Испытывал то досаду, когда не получалось, то эйфорию - когда получалось.
Уровень "Easy", а я словно Фэйсбук написал...) Надеюсь, дальше голова будет лучше варить.
2 задача
https://codingzone.io/problems/12/solution/1795
Появился такой вопрос, часто бывает, что моя ИДЕ никаких ошибок относительно написанного кода не выдает, а на CZ форма, напротив - выдает, в частности, что "не определена переменная". Нужно как-то поднастроить PHPSTORM, чтобы тоже получать такие ошибки?
И спасибо за уроки.)
Привет. С решениями всё ок. По твоему вопросу - поставь вот это
В консоли разработчика было следующее:
Set-Cookie: login=admin; expires=Sun, 31-May-2020 23:37:35 GMT; Max-Age=20; path=/
После 20 секунд куки удалилась из массива
Задание 1 - https://codingzone.io/ru/problems/11/solution/1831
Задание 2 - https://codingzone.io/ru/problems/12/solution/1833
У задач стоит уровень easy, я трачу на них достаточно много времени. Если с medium у меня будет еще хуже, то такой себе из меня программист выйдет.
Отлично. Easy для начинающего это hard) Дайте себе чуть больше времени
Вот что выдалось в консоли.
Set-Cookie: login=admin; expires=Thu, 01-Jan-1970 00:00:20 GMT; Max-Age=0; path=/
После 20 секунд и обновления она исчезла.
Она и через 1 секунду у вас исчезнет)
Артём, привет. После создания файла viewCookies.php и внесения туда кода
получилось вот что
array(1) { ["XDEBUG_SESSION"]=> string(8) "PHPSTORM" }
Что это, как убрать?
Это расширение в хроме добавляет.
Привет, решение первой задачи ( не получается ссылку вставить с решением, только на саму задачу)
Строки пишутся в одинарных кавычках.
Пробелы перед [] не ставятся.
Элементы массива так и называются - элементы.
У меня всё работает, код такой
Привет, Артём. Решила, наконец-то, вторую задачу из урока. Посмотри, не слишком ли громоздкое решение получилось? У тебя оно изящнее и проще. (просто мне надо разобраться в алгоритме) Интересует мнение опытного программиста.)))
И поясни, плиз, если не сложно, почему в твоём решении, ты сначала $maxDiff = null, а потом в цикле if ($maxDiff === null)? Как это объяснить? т.е. ты сначала переменной присваиваешь значение null, а потом в цикле говорить: если $maxDiff === null, то .. и дальше идёт какое-то действие. Зачем так делать, ведь мы сами присвоили null переменной? Надеюсь, я понятно выразила свой вопрос?
GENIOUS, как вы до этого дошли? какие использовали источники информации?
Почему-то вообще без изменений.
Set-Cookie: login=admin; expires=Wed, 22-Jul-2020 10:08:17 GMT; Max-Age=21; path=/
Set-Cookie: login=admin; expires=Wed, 22-Jul-2020 10:09:45 GMT; Max-Age=21; path=/
Почему без изменений? Вон же expires обновился
Всё, понял!
Но в задании речь шла о страничке для просмотра куки, а вы видимо обновляли страничку, на которой куки устанавливаются.
А где теперь тут плейграунд?
Пока нет, пользовались им?
Не всегда, но бывало. На всякий случай, перед отправкой в задание, проверял в плейграунде. Пару раз помогало избежать простейших синтаксических ошибок.
Не нужно скидывать код, если прошли все тесты. Если же тесты не прошли и вам что-то непонятно - задавайте вопрос)
Не нужно скидывать код, если прошли все тесты. Если же тесты не прошли и вам что-то непонятно - задавайте вопрос)
А почему у меня устанавливаются куки и следующимм образом тоже?
(Выводит текст, а затем устанавливает cookie):
Браузер Google Chrome Version 88.0.4324.150 (Official Build) (64-bit)
PS Firefox тоже.
Они не могут установиться в таком варианте кода. Вы их скорее всего до этого установили нормальным кодом. Куки всегда приходят в заголовке ответа. После отправки тела нельзя отправить заголовки. У вас видимо показ ошибок выключен.
У меня включен показ ошибок, и у меня куки после удаления вновь устанавливаются в таком варианте...
Может php поумнел в очередной раз? Действительно работает в php7.3 даже
Куки установил таким образом, причем при установке time() + 20 кука заведомо была мёртвой, так как время на компе не соответствовало установленному: вот так.
А также не понял почему у некоторых комментаторов время отображается вот так
Set-Cookie: login=admin; expires=Thu, 01-Jan-1970 00:00:20 GMT; Max-Age=0; path=/
Set-Cookie: Password=123; expires=Thu, 01-Jan-1970 00:00:20 GMT; Max-Age=0; path=/
Потому что time() + забывают