В соответствии с реализацией " setcookie () " в PHP, проверка значения cookie не будет работать, пока вы не переместите элемент управления со страницы, где вы создаете cookie. Таким образом, ваш «SET» будет создавать cookie на одной странице, и «sesion ()» следует вызывать с другой страницы, чтобы проверить значение cookie, которое вы установили. Попробуйте и надеюсь, что это поможет!
Попробуйте следующий подход (уточните это в соответствии с вашими потребностями). Я пытаюсь обновить саму страницу после установки cookie, и функция «sesion ()» является динамической функцией, которая может иметь или не иметь никаких аргументов. Таким образом, когда вы передаете какой-либо аргумент, cookie будет установлен, в противном случае он будет проверен на наличие. Сопутствующей функцией с func_num_args () является func_get_args () . Это поможет вам санировать ожидаемые аргументы в функции.
<?php
error_reporting(E_ALL);
ini_set("display_errors", 1);
ini_set("log_errors", 0);
session_start();
function sesion(){
// func_num_args() number of arguments passed to the function
if (func_num_args() == 0) { // if no arguments were passed, means the page is refreshed and cookie won't be set further
if(isset($_COOKIE['id']) && isset($_COOKIE['alias'])){
$_SESSION['logueado'] = true;
$_SESSION['id'] = $_COOKIE['id'];
$_SESSION['alias'] = $_COOKIE['alias'];
return true; //THIS IS NEVER RETURNING TRUE
}
if(isset($_SESSION['id']) && isset($_SESSION['logueado']) && $_SESSION['logueado'] == true){
return true;
}
else {
return false;
}
}
else { // if number of args > 0, means you need to cookie here and refresh the page itself
global $data; // set this to global as the $data will be available outside of this function
setcookie("id",$data['id'], time()+3600*24*30,'/');
setcookie("alias",$data['nombre'], time()+3600*24*30,'/');
/**
* refresh the page by javascript instead of header()
* as header already being sent by the session_start()
*/
echo '<script language="javascript">
<!--
window.location.replace("' . $_SERVER['PHP_SELF'] . '");
//-->
</script>';
die();
}
}
sesion(1); // passed an argument to set the cookie
?>
Я думаю, что у вас возникнут проблемы с разделом JavaScript, так как он изменит URL страницы, и я предполагаю, что вы пытаетесь включить этот скрипт в страницы. Итак, я воспользуюсь помощью call_user_func () и последняя часть «else» после строк setcookie () будет изменена на следующую строку:
call_user_func("sesion");
Надеюсь, теперь это будет иметь смысл.