Ответы пользователя по тегу HTTP Cookies
  • Как сделать общие куки у поддоменов в Wordpress?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Добавить в wp-config.php:
    define('ADMIN_COOKIE_PATH', '/');
    define('COOKIE_DOMAIN', '');
    define('COOKIEPATH', '');
    define('SITECOOKIEPATH', '');

    И очистить кеш и куки.

    У вас мультисайт?
    Ответ написан
  • Почему не устанавливаются cookie в Wordpress?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Из документации (жирным выделил то, что важно):
    setcookie() задает cookie, которое будет передано клиенту вместе с другими HTTP-заголовками. Как и любой другой заголовок, cookie должны передаваться до того как будут выведены какие-либо другие данные скрипта (это ограничение протокола). Это значит, что в скрипте вызовы этой функции должны располагаться до остального вывода, включая вывод тегов и , а также пустые строки и пробельные символы.

    Из-за этого не работает в footer.php. Если бы у вас был включен режим отладки и вывод ошибок, то вы бы увидели что-то типа:
    Warning: Cannot modify header information - headers already sent by (output started at /Users/Ihor/Code/playground/wp-includes/class.wp-styles.php:242) in /Users/Ihor/Code/playground/wp-content/themes/playground/footer.php on line 8

    Далее, пример с хуком init работает, но есть 2 нюанса. Во-первых, у вас ошибка - константы DAYS_IN_SECONDS не существует, должна быть DAY_IN_SECONDS. Далее, опять идем в документацию по поводу этого параметра (жирным выделил то, что важно):
    expires
    Время, когда срок действия cookie истекает. Это метка времени Unix, то есть количество секунд с начала эпохи. Другими словами, желательно задавать это время с помощью функции time(), прибавляя время в секундах, через которое срок действия cookie должен истечь. Либо можно воспользоваться функцией mktime(). time()+60*60*24*30 установит срок действия cookie 30 дней. Если задать 0 или пропустить этот аргумент, срок действия cookie истечет с окончанием сессии (при закрытии браузера).

    На языке кода это будет:
    function my_setcookie_example()
    {
    	setcookie(
    		'testing',
    		'123',
    		time() + 30 * DAY_IN_SECONDS, // вот так должно быть
    		COOKIEPATH,
    		COOKIE_DOMAIN
    	);
    }
    add_action( 'init', 'my_setcookie_example' );

    Во-вторых, из той же документации (жирным выделил то, что важно):
    После передачи клиенту cookie станут доступны через массив $_COOKIE при следующей загрузке страницы. Значения cookie также есть в $_REQUEST.

    То есть, ваше var_dump($_COOKIE['testing']); сработает только после перезагрузки, а при первой попытке - NULL и:
    Notice: Undefined index: testing in /Users/Ihor/Code/playground/wp-content/themes/playground/functions.php on line 134
    .

    RTFM.
    Ответ написан
  • Как организовать сессию-cookies пользователя на сайте Wordpress?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Посмотрите лучше в сторону localStorage
    Ответ написан
    Комментировать