[英]cookie won't set
这是一个关于我的旧版本的问题:cookie不会被设置: cookie无法被设置在我无法设置 cookie的地方(但是它被设置为“正确”),
现在问题已解决; Cookie似乎没有设置
Cookie'set':(无效)
setcookie("id",$data['id'], time()+3600*24*30,'/');
setcookie("alias",$data['nombre'], time()+3600*24*30,'/');
Cookie检查:(似乎可以正常工作)
function sesion(){
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;
}
}
未设置Cookie :(有效)
function cerrar_sesion(){
session_start();
$_SESSION['logueado']= false;
$_SESSION['id']= NULL;
session_unset();
session_destroy();
setcookie("id",false,time()-3600,"/");
setcookie("alias",false,time()-3600,"/");
unset($_COOKIE['id']);
unset($_COOKIE['alias']);
}
发生的情况是,登录只能通过$ _SESSION进行,因此30分钟无活动后,该用户将不再登录,
知道我在做什么错吗? 非常感谢!
如上所述,您无法从设置的同一页面读取cookie。 我看到您已经尝试使用Ajax欺骗它,但是我不认为这将是一个有效的窍门,因为Ajax调用不会更改您仍在浏览的页面的状态。 因此,您可以使用setcookie进行完全刷新或重定向,或者在同一时间进行操作,也可以在$ _COOKIE中定义所需的值,以便其在同一页面上可用。 像这样:
setcookie("id",$data['id'], time()+3600*24*30,'/');
setcookie("alias",$data['nombre'], time()+3600*24*30,'/');
$_COOKIE['id'] = $data['id'];
$_COOKIE['alias'] = $data['nombre'];
设置cookie行对我来说很好。
至于}else if(isset($_COOKIE['id']) && i
因为如果删除则返回,否则这里还是可以的,如果没有返回值,则必须将else保留在这里,以便不进行评估此块一般来说,我不知道, elseif
是具有相同else if
在所有的情况下,
函数会话的构建方式将如下所示:
我要说的是,该会话的工作原理完全符合预期,因此我没有发现任何问题。
<?php
$data='Hello';
setcookie("id",$data['id'], time()+3600*24*30,'/');
setcookie("alias",$data['nombre'], time()+3600*24*30,'/');
session_start();
function sesion()
{
if(isset($_SESSION['id']) && isset($_SESSION['logueado'])
&& $_SESSION['logueado'] == true)
{
echo 'SESSION IS SET<br>';
return true;
}
if(isset($_COOKIE['id']) && isset($_COOKIE['alias']))
{
$_SESSION['logueado'] = true;
$_SESSION['id'] = $_COOKIE['id'];
$_SESSION['alias'] = $_COOKIE['alias'];
echo 'COOKIE is alive and session set'.$_SESSION['alias'].'<br>';
return true; //THIS IS NEVER RETURNING TRUE
}
else
{
echo 'NO SESSION, NO COOKIE YET, WAIT UNTIL REFRESH<br>';
return false;
}
}
sesion() ;
?>
尝试从setcookie()调用中删除path参数,也许就是问题所在。
另外,您是否检查$ data实际包含任何数据?
可能您在设置cookie时确实遇到了已知问题,并且已禁用有关警告的错误报告。
你试一试:
error_reporting(E_ALL);
您可能会在页面上看到类似“无法修改标题。标题已发送”的信息。 那是因为您需要在页面上显示任何内容之前先设置Cookie。 因此,解决问题的解决方案是将代码实施为在页面底部设置SET cookie或使用ob_start / ob_clean。
让我知道是否有帮助:)
根据PHP中的“ setcookie() ”实现,除非将控件从要创建Cookie的页面上移出,否则cookie值检查将不起作用。 因此,您的“ SET”将在一个页面中创建cookie,而应从另一页面调用“ sesion()”以检查您设置的cookie的值。 试试看,希望对您有所帮助!
尝试以下方法(请根据您的需要进行优化)。 在设置cookie和“ sesion()”函数之后,我在这里尝试刷新页面本身的是一个动态函数,该函数可能有也可能没有任何参数。 因此,当您向其传递任何参数时,将设置cookie,否则将检查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()的帮助,在setcookie()行将更改为以下行之后,最后一个“其他”部分:
call_user_func("sesion");
希望这现在有意义。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.