Этот урок набрал набрал достаточно большое количество комментариев и дальнейшее его комментирование отключено. Если вы хотели убедиться в правильности выполнения ДЗ или у вас возник вопрос по уроку, посмотрите ранее добавленные комментарии, кликнув по кнопке ниже. Скорее всего вы найдете там то, что искали. Если это не помогло - задайте вопрос в чате в телеграме - https://t.me/php_zone
1nSide 03.05.2018 в 10:47

Значения время выставляю на 0 работает на 20 не работает


setcookie('login' , 'admin' , 20 , '/');
setcookie('Password' , '123' , 20 , '/');
echo 'Cookie отработало';
1nSide 03.05.2018 в 10:48

хотя во вкладке сеткуки пишется что присутствуют
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=/

ivashkevich 03.05.2018 в 18:31

Всё правильно, куки действительно устаревают спустя 20 секунд от момента начала эпохи unix. Я же не просто так просил ознакомиться с документацией. Почитайте внимательно про параметр expire :)

[email protected] 15.04.2021 в 08:50

Как там, в 70х поживаете?

dom1r 14.08.2018 в 19:20

Не знаю как лучше так:

setcookie('login', 'admin', time() + 20, '/');

Или так:

$ttl = time() + 20;
setcookie('login', 'admin', $ttl, '/');
ivashkevich 14.08.2018 в 20:48

Хоть как =) Понятно и так и так.

Kostik04 30.08.2018 в 12:03

Сделал всё, как вы сказали, но всё равно выдаёт ошибку 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
Вот мой код:

<?php
setcookie('login', 'admin', 0, '/');
ivashkevich 01.09.2018 в 13:27

Значит что-то выводится перед тем, как вызывается эта функция.

Kostik04 01.09.2018 в 13:38

Спасибо большое, оказывается кодировка была не UTF-8.

Ysup 23.08.2020 в 22:33

Такая же ошибка. Несколько часов искал причину, потом решил заглянуть сюда и оопа! Оказывается причина в кодировке.

artemjeka 07.09.2018 в 13:42

А почему вашему сайту доступны все мои куки(yandex, mail, vk)? Когда как скажем сайту youtube доступны только youtube.com и googe.com куки?

ivashkevich 07.09.2018 в 21:46

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

artemjeka 10.09.2018 в 09:18

Понял, спасибо.

[email protected] 04.10.2018 в 14:27

Выходит уже описанная ошибка

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

код

<?php

setcookie('login1', 'admin1', 0, '/');

//var_dump($_COOKIE);

?>

нашел решение
output_buffering = on

stokato 05.11.2018 в 12:46

Укажите параметр $ttl в функции setcookie равным 20.

setcookie('cooks', 'kakay-to stroka', time() + 20);

Все проверил, отработало через 20 секунд умерла.

ivashkevich 05.11.2018 в 21:41

Отлично)

virtual2018 21.11.2018 в 17:03

В документации третий параметр setcookie($name, $value, $ttl, $path), называется $expire.
"Если указать 0, то cookie будет установлена навсегда (пока её не удалят)" - в документации:
"Если задать 0 или пропустить этот аргумент, срок действия cookie истечет с окончанием сессии (при закрытии браузера)" - не противоречит, но дополняет.

ivashkevich 22.11.2018 в 09:35

Угу, при этом в современных браузерах понятие "сессии" у каждого своё =)

Pavel-Tonk 04.12.2018 в 01:05

В файле setCookie установил

<?php
setcookie('login','admin',time()+20,'');

В файле getCookie сделал вывод

<?php
var_dump($_COOKIE);

сколько не перезагружаю cookie живы и выводятся, в чем ошибся? в Expires 2018-12-03T22:04:59.363Z
время по серверу 01:01:22 04.12.2018 (date('H:i:s d.m.Y');)

ivashkevich 04.12.2018 в 09:12

Потому что этот срок действия для браузера, а не для сервера. Когда подойдет это время на компе пользователя, они удалятся из браузера.

Pavel-Tonk 04.12.2018 в 22:49

01:01:22 04.12.2018 Так это время у меня и было по факту, а это уже прошло 2018-12-03T22:04:59.363 3 часа назад.

ivashkevich 04.12.2018 в 23:20

Смотрите наличие куки в браузере (загуглите как). Если они там есть, значит не протухли.

Bogdan 17.12.2018 в 14:40

вроде поставил, но я так понял что они в куки даже не попадают,ну по крайней мере когда я делаю вывод куки, то у меня ничего не отображает, хотя даже 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=/
так что думаю что все отработало верно

ivashkevich 17.12.2018 в 15:29

Потому что вместо 20 нужно написать time() + 20

excent63 27.01.2019 в 17:32

Спасибо за урок!

<?php
setcookie('login','admin', time()+20,'/');
ivashkevich 29.01.2019 в 07:07

Пожалуйста)

Moskva 01.06.2019 в 15:00

Код:

setcookie('login', 'admin', time()+20 , '/');
setcookie('password', '12345', time()+20 , '/');
echo 'Куки успешно установлены';
ivashkevich 03.06.2019 в 18:08

Отлично

H3licoptero 03.10.2019 в 22:07
setcookie('login', 'admin', time() +20, '/');
setcookie('password', '123', time() -20, '/');
echo 'Cookie установлены.';

Отработала 20 сек и умерла. Второй вариант попробовал, потому что кука висела после урока в браузере. Установил с '-', удалилась.

ivashkevich 04.10.2019 в 14:25

Ок

[email protected] 19.11.2019 в 21:44

Спасибо большое за понятную статью!

ivashkevich 20.11.2019 в 16:30

Пожалуйста)

[email protected] 26.11.2019 в 20:45

Почему при выполнении это кода выдаёт, что масив пустой

array(0) { }???

Файл COOKIE

<?php
var_dump($_COOKIE);

Файл setcookie

<?php
setcookie('login', 'admin', time() +20 , '/');
ivashkevich 27.11.2019 в 19:56

Может 20 секунд успевает пройти?

Salexandr 19.12.2019 в 23:33
setcookie('login', 'admin', time() + 20, '/');

Expires:"Сессионная" - при $TTL = 0 (время жизни - вся сессия).
Expires:"Thu, 19 Dec 2019 20:19:04 GMT" - при $TTL = Time() +20 (время жизни до указанного времени).
Печенки работают! Стабильно.

ivashkevich 21.12.2019 в 20:11

Отлично)

[email protected] 25.12.2019 в 19:05

В чем отличие использовать куки или сессию для входа?

ivashkevich 26.12.2019 в 19:08

Погуглите) Сессии сложнее масштабировать на больших проектах, когда у вас несколько серверов появляется.

YuraG 13.01.2020 в 07:37

Спасибо за урок

куки удалились после установки текущей даты по истечению 20 сек.

для чего используются localStorage и sessionStorage?
как правильно и безопасней реализовать авторизацию пользователей на сайте?

ivashkevich 15.01.2020 в 06:06

Нет однозначно правильного и безопасного способа. Везде есть потенциальные угрозы.

YuraG 15.01.2020 в 20:16

спасибо за ответ.

eNergy 14.01.2020 в 15:59

Поставил 20 секунд и в Set-Cookie был указан 1970 год =). В файле viewCookie, массив был пустой. Прочитал в документации и задал в $ttl выражение time() + 20 и после этого в массиве появились данные, а после 20 секунд они пропали. Спасибо за урок.

ivashkevich 15.01.2020 в 06:20

Пожалуйста)

Ember 02.04.2020 в 09:05

Вот как раз тут и вылезет проблема с кодировкой с bom. Т.к. этот bom будет считаться html выводом и не даст установить куку в через заголовок, потому что он уже будет установлен.

ivashkevich 02.04.2020 в 09:06

С PHP работа ведется в PhpStorm

studentDev 05.04.2020 в 06:26

При назначение параметра $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? :/

ivashkevich 05.04.2020 в 19:18

Unix-time

И прочитайте про параметр функции в официальной документации.

studentDev 06.04.2020 в 06:54

Хорошо

studentDev 06.04.2020 в 12:44

Я понял почему я живу в 1971 г, теперь меня это не смущает :)
Спасибо)

Прочитал в Manual подробнее о функции setcookie, теперь всё понятно... :)

ivashkevich 06.04.2020 в 15:50

Молоток)

[email protected] 11.04.2020 в 09:06

Тьфублин))
Долго думал, что же я делаю не так, пока не догадался почитать документацию по setcookie():

expires
Время, когда срок действия cookie истекает. Это метка времени Unix, то есть количество секунд с
начала эпохи. Другими словами, желательно задавать это время с помощью функции time(), прибавляя
время в секундах, через которое срок действия cookie должен истечь.

В итоге, когда выставил setcookie('login', 'admin', time() + 20, '/'), печенька отработала как надо

ivashkevich 11.04.2020 в 21:21

Дока наше всё

n.yurasheva 13.04.2020 в 00:23
<?php
setcookie('login', 'admin', time() + 20, '/');

Убедилась)), 'login' => string 'admin' (length=5) пропала

ivashkevich 13.04.2020 в 14:50

Отлично

[email protected] 15.04.2020 в 13:34

Строка пропадает) появляется строка вида expires и время +20 секунд. Читал, что можно использовать функцию time() + 20, как правильнее?

Хотел спросить не по домашке - я захотел установить куки, потом вывести форму для их удаления. Оно правда работает и куки удаляются?

Файл setCookies.php

<?php

require __DIR__ . '/deleteCookies.php';
setcookie('login', 'admin', 0, '/');
setcookie('password', 'godzilla', 0, '/');
echo 'cookie is installed';
?>

<html>
<head>
    <title>Try to delete cookies</title>
</head>
<body>
<form action="deleteCookies.php" method="post">
    <p>Вы хотите удалить куки? <input type="text" name="answer"/></p>
    <p>Напишите yes, если хотите их удалить</p>
    <p><input type="submit"/></p>
</form>
</body>
</html>

Файл deleteCookies.php

<?php
$answer = $_POST['answer'];
if ($answer == 'yes') {
    setcookie('login', '', 0, '/');
    setcookie('password', '', 0, '/');
}

Спасибо

ivashkevich 15.04.2020 в 17:35
time() + 20

Именно так и надо.

Удаляются. Только непонятно, для чего вы сделали

require __DIR__ . '/deleteCookies.php';

перед установкой куки?

titelivus 01.05.2020 в 17:41

У меня после установки $ttl равным 20:

Set-Cookie: login=admin; expires=Thu, 01-Jan-1970 00:00:20 GMT; Max-Age=0; path=/
ivashkevich 02.05.2020 в 15:45

Прочитайте официальную документацию по setcookie :)

Sviatoslav 03.05.2020 в 21:36

Нужно добавлять функцию time() к времени существования куки, иначе ничего не работает. Отсчет начинается 01.01.1970 г. Домашнее задание с подвохом ;)

<?php
setcookie('login', 'admin', time()+20, '/');
setcookie('password', 'p@SsW0rd', time()+20, '/');
echo 'Cookie установлены';
ivashkevich 03.05.2020 в 21:40

Верно)

2yeezy4me 05.05.2020 в 09:55
<?php
setcookie('login' , 'admin' , time() + 20, '/');

Все работает. Отваливается через 20 секунд.

ivashkevich 06.05.2020 в 13:43

Отлично!

[email protected] 08.05.2020 в 10:17
<?php
setcookie('password', 'name', time() + 20, '/');
setcookie('password', 'name', '', '/');

echo 'Cookie установлено';

Установил cookie, через 20 секунд массив обнулился. Можно удалить cookie с помощью значения с пустой строкой ' '.
ivashkevich 08.05.2020 в 20:20

Отлично

[email protected] 08.05.2020 в 10:26

У меня заканчивается срок пользования PHPStorm. Как быть? Дождаться окончания срока и установить новый? Или есть другие варианты?

ivashkevich 08.05.2020 в 20:21

Можно так, можно поискать EAP версию, можно купить

IePyton 14.05.2020 в 15:41
<?php

setcookie('login', 'admin', time() + 20, '/');
ivashkevich 15.05.2020 в 18:09

Отлично

IePyton 25.05.2020 в 12:37

предыдущие задачи решил - есть в коментах,
новые:
https://codingzone.io/problems/11/solution/843
https://codingzone.io/problems/12/solution/1278

ivashkevich 26.05.2020 в 10:15

Для чего в первом решении ksort?

IePyton 26.05.2020 в 10:20

не нужен ksort(

[email protected] 31.05.2020 в 21:31

1 задача
https://codingzone.io/problems/11/solution/1794
Сутки над ней тарахтел.
Испытывал то досаду, когда не получалось, то эйфорию - когда получалось.
Уровень "Easy", а я словно Фэйсбук написал...) Надеюсь, дальше голова будет лучше варить.
2 задача
https://codingzone.io/problems/12/solution/1795

Появился такой вопрос, часто бывает, что моя ИДЕ никаких ошибок относительно написанного кода не выдает, а на CZ форма, напротив - выдает, в частности, что "не определена переменная". Нужно как-то поднастроить PHPSTORM, чтобы тоже получать такие ошибки?
И спасибо за уроки.)

ivashkevich 01.06.2020 в 07:59

Привет. С решениями всё ок. По твоему вопросу - поставь вот это

Hellbound 01.06.2020 в 02:39
<?php
setcookie('login' , 'admin' , time() + 20, '/');

В консоли разработчика было следующее:
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 у меня будет еще хуже, то такой себе из меня программист выйдет.

ivashkevich 01.06.2020 в 08:03

Отлично. Easy для начинающего это hard) Дайте себе чуть больше времени

[email protected] 08.06.2020 в 14:42

Вот что выдалось в консоли.
Set-Cookie: login=admin; expires=Thu, 01-Jan-1970 00:00:20 GMT; Max-Age=0; path=/
После 20 секунд и обновления она исчезла.

<?php
setcookie('login','admin', 20, '/');
ivashkevich 08.06.2020 в 14:47

Она и через 1 секунду у вас исчезнет)

UtillitE 11.07.2020 в 20:36

Артём, привет. После создания файла viewCookies.php и внесения туда кода

<?php
var_dump($_COOKIE);

получилось вот что
array(1) { ["XDEBUG_SESSION"]=> string(8) "PHPSTORM" }
Что это, как убрать?

ivashkevich 12.07.2020 в 06:18

Это расширение в хроме добавляет.

UtillitE 14.07.2020 в 11:09

Привет, решение первой задачи ( не получается ссылку вставить с решением, только на саму задачу)

<?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;
ivashkevich 14.07.2020 в 13:57

Строки пишутся в одинарных кавычках.

$arr [] = $composition;

Пробелы перед [] не ставятся.

Элементы массива так и называются - элементы.

UtillitE 15.07.2020 в 21:36

У меня всё работает, код такой

<?php
setcookie('login', 'admin', time() +20, '/');
UtillitE 22.07.2020 в 17:29

Привет, Артём. Решила, наконец-то, вторую задачу из урока. Посмотри, не слишком ли громоздкое решение получилось? У тебя оно изящнее и проще. (просто мне надо разобраться в алгоритме) Интересует мнение опытного программиста.)))

<?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;
UtillitE 22.07.2020 в 17:35

И поясни, плиз, если не сложно, почему в твоём решении, ты сначала $maxDiff = null, а потом в цикле if ($maxDiff === null)? Как это объяснить? т.е. ты сначала переменной присваиваешь значение null, а потом в цикле говорить: если $maxDiff === null, то .. и дальше идёт какое-то действие. Зачем так делать, ведь мы сами присвоили null переменной? Надеюсь, я понятно выразила свой вопрос?

artuom 23.10.2020 в 21:28

GENIOUS, как вы до этого дошли? какие использовали источники информации?

VitaliyB 22.07.2020 в 13:11

Почему-то вообще без изменений.
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=/

setcookie('login', 'admin', time() + 21, '/');
ivashkevich 22.07.2020 в 14:38

Почему без изменений? Вон же expires обновился

VitaliyB 22.07.2020 в 17:25

Всё, понял!

ivashkevich 22.07.2020 в 20:46

Но в задании речь шла о страничке для просмотра куки, а вы видимо обновляли страничку, на которой куки устанавливаются.

GeoOK 10.08.2020 в 13:23
<?php
setcookie('$ttl', 20, time()+20, '/');

А где теперь тут плейграунд?

ivashkevich 11.08.2020 в 13:30

Пока нет, пользовались им?

GeoOK 12.08.2020 в 09:04

Не всегда, но бывало. На всякий случай, перед отправкой в задание, проверял в плейграунде. Пару раз помогало избежать простейших синтаксических ошибок.

pixel 08.11.2020 в 00:55
<?php

//Замените каждый элемент произведением всех других элементов
    $line = '1 2 3 4 5';
    $array = explode(' ', $line);

    for ($i = 0; $i < count($array); $i++) {
        $result = 1;
        for ($j = 0; $j < count($array); $j++) {
            if ($j == $i) {
                continue;
            }
            $result *= $array[$j];
        }
        echo $result . ' ';
        $result = 1;
    }
ivashkevich 08.11.2020 в 15:36

Не нужно скидывать код, если прошли все тесты. Если же тесты не прошли и вам что-то непонятно - задавайте вопрос)

pixel 08.11.2020 в 01:17
<?php
    //Найти максимальную разницу между двумя элементами
    $line = '1 6 4 9';
    $array = explode(' ', $line);
    $max = $array[0];
    $idMax = $array[0];

    for ($i = 0; $i < count($array); $i++) {
        if ($max < $array[$i] && count($array) - 1 != $i) {
            $max = $array[$i];
            $idMax = $i;
        }
    }
    $min = $array[$idMax + 1];
    for ($i = $idMax + 1; $i < count($array); $i++) {
        if ($min > $array[$i]) {
            $min = $array[$i];
        }
    }
    echo $max - $min;
ivashkevich 08.11.2020 в 15:37

Не нужно скидывать код, если прошли все тесты. Если же тесты не прошли и вам что-то непонятно - задавайте вопрос)

Deo 25.02.2021 в 12:43

А почему у меня устанавливаются куки и следующимм образом тоже?
(Выводит текст, а затем устанавливает cookie):

<?php
echo 'Сейчас попробуем установить cookie';
setcookie('login', 'admin', 0, '/');

Браузер Google Chrome Version 88.0.4324.150 (Official Build) (64-bit)
PS Firefox тоже.

ivashkevich 28.02.2021 в 06:13

Они не могут установиться в таком варианте кода. Вы их скорее всего до этого установили нормальным кодом. Куки всегда приходят в заголовке ответа. После отправки тела нельзя отправить заголовки. У вас видимо показ ошибок выключен.

Deo 28.02.2021 в 06:27

У меня включен показ ошибок, и у меня куки после удаления вновь устанавливаются в таком варианте...

[email protected] 15.04.2021 в 08:54

Может php поумнел в очередной раз? Действительно работает в php7.3 даже

serega19860511 27.04.2021 в 22:22
setcookie('login', 'admin', time() + 20, '/');
setcookie('pass', '1234', time() + 60 * 60 * 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=/

ivashkevich 28.04.2021 в 19:27

Потому что time() + забывают

Логические задачи с собеседований