这是一个关于我的旧问题的问题:cookie不会被取消: cookie wont unset 我忘记了cookie的问题(但是设置'正确'),
现在问题解决了; cookie似乎没有SET
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分钟后用户不再登录,
知道我做错了什么吗?非常感谢!
答案 0 :(得分:6)
如上所述,您无法从设置的同一页面读取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'];
答案 1 :(得分:2)
设置cookie行可以正常使用。
至于}else if(isset($_COOKIE['id']) && i
如果你在这里删除其他你返回仍然没关系,如果上面没有返回你必须保留其他在这里,以便不评估这个块
一般来说,我不确定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() ;
?>
答案 2 :(得分:1)
尝试从setcookie()调用中删除path参数,这可能就是问题所在。
另外,您是否检查过$ data实际上是否包含任何数据?
答案 3 :(得分:1)
您可能确实知道设置Cookie的问题,并且您已禁用有关警告的错误报告。
试试吧:
error_reporting(E_ALL);
您可能会在您的页面上看到类似“无法修改标题。标题已发送”的内容。这是因为您需要在页面上显示任何内容之前设置Cookie。因此,解决问题的方法是将代码实现到页面底部的SET cookie或使用ob_start / ob_clean。
让我知道它是否有帮助:)
答案 4 :(得分:0)
根据PHP中的“setcookie()”实现,在您从创建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,我想您正在尝试将此脚本包含在页面中。因此,在使用以下行更改setcookie()行之后,我将接受call_user_func()和最后“else”部分的帮助:
call_user_func("sesion");
希望现在这样有意义。