【问题标题】:php session cookie not stored未存储php会话cookie
【发布时间】:2019-09-13 22:56:23
【问题描述】:

我的 header.php 文件中有这个 php 脚本,将 HTTP 标头发送到 python 脚本,并将 GUID 设置为会话 cookie:

 <?php
  ob_start();
  function guid(){
    if (function_exists('com_create_guid')){
        return com_create_guid();
    }else{
        mt_srand((double)microtime()*10000);//optional for php 4.2.0 and up.
        $charid = strtoupper(md5(uniqid(rand(), true)));
        $hyphen = chr(45);// "-"
        $uuid = chr(123)// "{"
                .substr($charid, 0, 8).$hyphen
                .substr($charid, 8, 4).$hyphen
                .substr($charid,12, 4).$hyphen
                .substr($charid,16, 4).$hyphen
                .substr($charid,20,12)
                .chr(125);// "}"
        return $uuid;
    }
  }
  $UA = $_SERVER['HTTP_USER_AGENT'];
  $REF = $_SERVER['HTTP_REFERER'];
  $IP =   $_SERVER['REMOTE_ADDR'];
  $GUID = guid();
  $actual_link = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
  if (!isset($_COOKIE["name"]))
    setcookie('name',$GUID);
  //echo $UA;
  //echo $REF;
  //echo $IP;
  //echo $GUID;
  echo exec("python /var/www/html/oscommerce-2.3.3.4/header_sender.py -u '$UA' -r '$REF' -i '$IP' -c '$GUID' -p '$actual_link' 2>&1");
  ob_end_flush();
  ?>

我看到的问题是,这会为同一会话中的每个页面加载生成一个新的 GUID - 会话 cookie 似乎没有被存储。

可能是什么问题? 谢谢

【问题讨论】:

    标签: php session cookies session-cookies


    【解决方案1】:

    好像你没有声明session_start()

    编辑:

    因为您使用的不是$_SESSION[" "],而是$_COOKIE[" "]

    您似乎没有通过time() + x seconds定义cookie将在您的浏览器上存储多长时间

    setcookie('name',$value,time()+..);
    

    【讨论】:

    • 嗨,这有关系吗?我没有使用 php session utils,而是手动设置 HTTP cookie。为什么我需要拨打session_start()
    • 哦,你是对的..btw 然后 IMO 有一个简单的 cookie 而不是 session ,其中 session 具有存储为 Cookie 的 Session ID
    • 好吧,根据php.net/manual/en/function.session-start.php,不设置时间意味着会话cookie——只要浏览器没有关闭,它就应该存在。我来看看使用 php session 函数。
    • 让我更新我的答案,我不应该删除前一个答案(而不是让它被删除)它使我们的对话变得与会话无关。 XD
    【解决方案2】:

    当你想使用会话时,首先需要你从session_start()开始,它应该在开始php标签之后的页面的第一行中使用,因为如果你在中间或结束或任何其他地方使用它会发生错误标题已经发送,这个错误发生的原因是当你在代码之间使用session_start()函数并且你在代码之间留下任何空格所以这个错误发生了

    【讨论】:

      【解决方案3】:

      不是这里的问题,但是我对 PHP cookie 的搜索没有设置引导我到这里,所以回答其他任何出现的人。

      还要注意您是如何设置到期时间的(如果您是的话)。我原来是这样设置的:

      setcookie(self::$tokenCookie, $response['refreshToken'], 86400 * 365, "/");
      

      目的是将其设置为未来 1 年 (86400 * 365)。然而,这使得它从纪元开始(1970 年)开始 1 年。要从 NOW 获得 1 年,请使用:

      setcookie(self::$tokenCookie, $response['refreshToken'], time() + (86400 * 365), "/");
      

      有点无聊,但它让我绊倒并造成了一些挫败感,所以希望这能帮助其他人避免这种挫败感。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-09-11
        • 1970-01-01
        • 2012-05-29
        • 2020-12-26
        • 2014-10-14
        • 2015-09-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多