【问题标题】:setcookie() function not working [duplicate]setcookie()函数不起作用[重复]
【发布时间】:2023-03-27 06:47:01
【问题描述】:

我目前正在开发一个小网站,我必须在该网站上创建一个帐户创建系统。为了知道用户是否已经连接,我想使用 cookie 因为这看起来是最简单的方法。但是,在查看 php.net 和其他一些论坛上的官方文档后,我仍然无法创建我的 cookie。这是我的代码:

function connexionOK() {
  $cookieName = "CookieCo";
  $cookieValue = "true";
  $isSent = setcookie($cookieName, $cookieValue, time() + 3600, "/");

  if($isSent) {
     echo '<script type="text/javascript">';
     echo "alert('Cookie envoyé');";
     echo "</script>";
  }
  else {
     echo '<script type="text/javascript">';
     echo "alert('Cookie failed');";
     echo "</script>";
  }}

所以页面确实在提醒我“Cookie 失败”。

感谢所有试图帮助我的人! :)

【问题讨论】:

  • 来自手册:If output exists prior to calling this function, setcookie() will fail and return FALSE. If setcookie() successfully runs, it will return TRUE. This does not indicate whether the user accepted the cookie. 看起来你在调用 setCookie() 之前有输出
  • 为我工作...您需要确保在发送任何输出之前调用 setcookie,也就是之前没有回声或打印
  • 作为添加到约翰的评论,或者您也无法在同一页面上设置和检查。您必须重新加载页面(无需再次设置)或在其他页面上检查
  • 另外,如果您需要保留现有的输出语句,您可以使用output buffering

标签: php cookies setcookie


【解决方案1】:

您可能在标头已发送后调用此函数:

试试这个,看看是否有异常:

function connexionOK() {
    $cookieName = "CookieCo";
    $cookieValue = "true";
    if(headers_sent()){
        throw new Exception('Cannot set cookie, headers already sent');
    }else{
        $isSent = setcookie($cookieName, $cookieValue, time() + 3600, "/");
        if($isSent){
            echo '<script type="text/javascript">';
            echo "alert('Cookie set');";
            echo "</script>";
        }else{
            echo '<script type="text/javascript">';
            echo "alert('Cookie not set');";
            echo "</script>";
        }
    }
}

connexionOK();

如果是这样,您将需要重构并确保在发送标头之前设置cookie。

编辑:包含上面的代码是为了更清楚地说明问题 - 它写得不好并且包含很多冗余,因为在发送标头时调用 set setCookie 将已经抛出异常并可能终止执行。如果不是这种情况,您将需要添加检查并相应地处理它们。

【讨论】:

    【解决方案2】:

    试试

    if(isset($_COOKIE['CookieCo'])){
         echo '<script type="text/javascript">';
         echo "alert('Cookie envoyé');";
         echo "</script>";
      }
      else {
         echo '<script type="text/javascript">';
         echo "alert('Cookie failed');";
         echo "</script>";
      }
    

    【讨论】:

    • 只有在浏览器收到第一个请求的标头并为第二个请求发回 cookie 后,第二个请求才会起作用。不是提问者问的。
    • 做或不做,没有“尝试”。 好的答案将始终解释所做的事情以及为什么以这种方式完成,不仅是为了 OP,也是为了 SO 的未来访问者。跨度>
    猜你喜欢
    • 2016-09-20
    • 1970-01-01
    • 2015-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-12
    • 2015-01-14
    • 1970-01-01
    相关资源
    最近更新 更多