PHP кукиес не работают. Можно удалить php?

121
12 октября 2021, 16:10

Не работают куки в PHP, имеем массив со всеми переводами текста: $local ассоциативный массив в котором ещё массивы выглядит это всё примерно так

$local = array(
    'ru' => array(
        'title' => 'Название проекта',
        'authTitle' => 'Авторизация на проекте'
    ),
    'en' => array(
        'title' => 'Name project',
        'authTitle' => 'Sign in'
    )
);

По дефолту ключ страны равен предпочтением пользователя и выяснение кода страны выглядит примерно так:

$localCode = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
if (isset($_COOKIE['lang'])) {//эта х+етень почему то возвращает false то биж он считает что НЕТУ куки lang но сам куки есть (в браузере зачекал)
    $lang = $_COOKIE['lang'];
} else {
    $lang = $localCode[0] . $localCode[1];//$localcode вернёт несколько кодов страны через запятую и мы выберем 2 первых символа тем самым выберем самый предпочитаемый язык пользователя
}

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

В итоге когда я создаю куки lang:

session_start();
setcookie("lang", "en", time() + 3600);

Куки создаётся в браузере и принимает нужное значение, но когда я отдельном файле local.php я пытаюсь их использовать система считает что их просто нет код с функцией выдачи нужного языка:


function lang ($name) {
    global $local;
    global $lang;
    echo $local[$lang][$name];
}

вынесен в отдельный файл и при создании куки lang он не хочет менять язык

Теперь про некоторые детали:

  1. Почему я сделал global $local и $lang вместо того что бы просто внести их в функцию. Ответ: имеется 2 функции которые дают нужный перевод и одна их них выводит этот перевод а другая возвращает его это нужно что бы я не писал миллион раз echo а когда нужно вернуть а не вывести просто применялась другая функция.

  2. Я не знаю обязательно ли начинать сессию в файле но в начале файла есть

session_start();

Ниже 3 картинки примеров кода как подключается local.php и сам код local.php в наглядности (его stackoverflow не хочет по красоте вставить)

Answer 1

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

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

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

*Источник: https://www.php.net/manual/ru/function.setcookie.php

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

READ ALSO
Приём платежей на сайте без агрегата

Приём платежей на сайте без агрегата

Ребята ,кто знает по какому принципу устроена приём платежей на сайте без сторонних агрегатов типо робокасса и тд

98
Вопрос по SEO и GET

Вопрос по SEO и GET

Друзья, не пинайте в животинтересует вопрос

96
NetBeans не выдает желаемое

NetBeans не выдает желаемое

Учусь javaСкачал NetBeans

212