【问题标题】:Using a PHP COOKIE使用 PHP COOKIE
【发布时间】:2012-08-22 05:37:48
【问题描述】:

当用户登录/注册时,我为他们设置了 COOKIE 和 SESSION。一个 SESSION 用于更多可用性,一个 COOKIE 用于持久性。当新用户注册我的网站时,我想将他们重定向到他们的个人资料。我需要在他们注册后立即创建一个 SESSION 和 COOKIE 变量以执行此操作。这是我的解决方案:

    $query2= "INSERT INTO users (fname, lname, email, password) VALUES   
 ('$fname', '$lname', '$email', '$password1')";
    mysqli_query($connect, $query2)
        or die('error with query');
    session_start();
    $query3= "SELECT * FROM users where email= '".$email."' AND password= 
'".$password1."'";
    $result2= mysqli_query($connect, $query3);
    $row= mysqli_fetch_array($result2);
    $_SESSION['id'] = $row['user_id']; 
    setcookie('id', $row['user_id']);
            echo $_SESSION['id'];
            echo $_COOKIE['id'];
    echo "You are now logged in.";

我首先插入新的数据行。然后我记得它来创建 SESSION 和 COOKIE 变量。但是,这是我的问题,每当我回显 COOKIE 变量时,它的值总是比实际值小一。 SESSION 还可以。我究竟做错了什么?可能是什么问题呢。我创建了另一个 page.php 来回显 SESSION 和 COOKIE 变量,它们在那里都是正确的。谢谢。

【问题讨论】:

  • 附带说明,您确实意识到存在 cookie 编辑器,因此在这种情况下,用户可以将 cookie 更改为任何用户 ID 并以他们的身份登录?
  • 如何防止这种情况发生?
  • 不要把这些东西存到cookie里
  • @IvanHušnjak cookie 中应该存储什么?
  • 那么我如何为用户提供持久性?

标签: php mysql


【解决方案1】:

您使用 setcookie 设置的 cookie 的值不会显示在同一页面上。

cookie 的工作方式是将您在 cookie 中设置的数据发送到浏览器以将其保存到您的本地 PC。 下次您的浏览器连接到服务器时,浏览器会在 $_COOKIE 数组中将其提供给您的页面。

因此在设置后立即使用 $_COOKIE 是行不通的。

另一方面,会话可以在您使用 $_SESSION 设置后立即使用。

【讨论】:

  • 谢谢你,现在更清楚了。 :) 我很感激。
【解决方案2】:

$_COOKIE 包含在请求中发送的 cookie。调用setcookie() 不会改变$_COOKIE——直到他们发送下一个请求。您正在看到最后一个请求的 cookie。 ;)

【讨论】:

  • 那么,我可以像我已经在做的那样在设置时进行设置吗?然后在配置文件脚本上调用它?
  • $_SESSION 只要他们的浏览器打开,就会持续存在。它适用于配置文件重定向。您只需要$_COOKIE 用于长期用户识别(但不要将机密用户信息存储在 cookie 中)。
猜你喜欢
  • 2012-02-24
  • 2011-05-29
  • 1970-01-01
  • 1970-01-01
  • 2011-10-08
  • 2018-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多