【问题标题】:How to determine cookie validity?如何确定 cookie 的有效性?
【发布时间】:2015-09-08 15:28:12
【问题描述】:

我正在开始会话

 session_start(); //So This session will get destroyed when user exit the browser

我将cookie设置为

 setcookie('cookie',$value,time()+3*60);
 $_SESSION['cookie'] = true; //When user log in, I don't need to get the 
                               salt again from db and do all the security 
                               checks. Assume it as a cache

此建议在this question 中提出。

问题是,cookie 在 3 分钟后过期。但是会话存在。所以用户在 3 分钟后尝试登录

    if($_SESSION['cookie'])
    {
      //success
    }
    else
     {
         //Authenticate user
     }

但这是错误的。由于 cookie 过期,else 部分应该执行。但是如果部分被执行。我知道该会话仍然存在。我该如何处理这种情况?

我知道这是由于time()+3*60。但是我该如何实现那个缓存呢?

【问题讨论】:

  • $_SESSION['cookie']与cookie无关。
  • time()*3*60 不是 3 分钟。
  • 要在 3 分钟内过期,它应该是 time() + 3*60 -- 相加,而不是相乘。
  • 请查看编辑。谢谢巴尔默

标签: php session cookies


【解决方案1】:

您需要检查不在 $_SESSION 中的 cookie。 在 $_COOKIE 中检查它们。

例如:

if($_COOKIE['cookie'])
{
   //success
}
else
{
     //Authenticate user
}

【讨论】:

  • $_SESSION 生命周期与 cookie 生命周期无关
  • 是的:) 我猜这会起作用。让我试试。感谢理解
  • @GopsAB 另外,检查 isset($_COOKIE['cookie']) 并检查值,因为可以在客户端(浏览器)中写入 cookie
【解决方案2】:

Cookie 和会话变量不相关(除了 PHP 在内部使用名为 PHPSESSID 的 cookie 将客户端连接到其会话)。使 cookie 过期对同名的会话变量没有任何影响。如果要测试cookie是否过期,使用:

if (isset($_COOKIE['cookie']))

【讨论】:

    猜你喜欢
    • 2020-11-18
    • 1970-01-01
    • 2021-11-24
    • 1970-01-01
    • 1970-01-01
    • 2017-12-22
    • 2016-11-09
    • 1970-01-01
    • 2010-11-27
    相关资源
    最近更新 更多