Проблема с файлами cookie Codeigniter 4 не может быть установлена
Это мой код контроллера. Я не могу устанавливать и получать файлы cookie в Codeigniter 4.
helper('cookie');
$this->response->set_cookie('forgetpwd',$token, time() + (3600),"/",site_url());
print_r($this->request->get_cookie('forgetpwd'));
die();
4 ответа
Не используйте die()
потому что тогда cookie не будет установлен. Вместо этого позвольте методу вернуться, чтобы CI мог выводить файлы cookie и заголовки.
Вам не нужен помощник, не загружайте его.
site_url()
не создает строку, которую вы должны использовать. Он включает протокол, т.е.https://example.com
когда все, что вам следует использовать, - это example.com.
У вас есть обратные аргументы домена и пути, и, как говорили другие, призыв кsetCookie()
как в
$this->response->setCookie('forgetpwd', $token, 3600, example.com);
Истекают аргумент может быть жизнь (в секундах), который вы хотите. ВsetCookie()
метод добавит time()
ему для вас.
Я не предоставляю аргумент пути, потому что вам нужно значение по умолчанию "/".
Из php.net - https://www.php.net/manual/en/function.setcookie.php
Файлы cookie не станут видимыми до следующей загрузки страницы, на которой они должны быть видны. Чтобы проверить, успешно ли был установлен файл cookie, проверьте его на следующей странице загрузки до истечения срока действия файла cookie. Срок действия устанавливается параметром expires. Хороший способ отладить существование файлов cookie - просто вызвать print_r($_COOKIE);.
Этот код работает для меня. Я получаю файл cookie из запроса и устанавливаю его в ответ. (Не забудьте проверить ввод пользователя перед его обработкой)
<?php
namespace App\Controllers;
use Config\Services;
class Home extends BaseController {
public function setLang($lang = ""){
// remember filter your inputs
Services::response()->setCookie('lang', $lang);
echo("<script>location='/index';</script>");
}
public function index(){
//default value
$lang = "es";
//if empty return NULL.
$tmpLang = Services::request()->getCookie("lang");
if(in_array($tmpLang, ["es", "en", "ja", "pt"])){
$lang = $tmpLang;
}
//show cookie value
echo $lang
}
}
?>
попробуйте использовать перенаправление с помощью файлов cookie, например
helper('cookie');
set_cookie('cookie_name', 'value', 14400);
return redirect()->to('url')->withCookies();
и на странице попробуйте пройти таким путем
print_r(get_cookie('cookie_name'));