繁体   English   中英

Cookie不会设置

[英]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在所有的情况下,

函数会话的构建方式将如下所示:

  • 在第一次加载时,它将显示:没有cookie,没有会话,因为在重新加载之前您看不到cookie(我想您已经知道了)。 -在第二次加载时,您将看到cookie存活会话集。 -在第二次加载后,您始终会看到会话已设置。

我要说的是,该会话的工作原理完全符合预期,因此我没有发现任何问题。

<?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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM