【问题标题】:How to alert a user a minute before his cookie expires in PHP / Javascript?如何在 PHP / Javascript 中的 cookie 过期前一分钟提醒用户?
【发布时间】:2020-06-18 20:11:01
【问题描述】:

我正在寻找可以在我的登录用户的 cookie 过期前一分钟提醒他们的东西,以便他们在 cookie 过期之前将内容保存在 CMS 中。关于如何实现相同的任何建议?

我在我的身份验证文件中设置了以下内容

setcookie("USERNAME", $user,time()+9000);
setcookie("AUTHORID", $rec["id"],time()+9000);
setcookie("AUTH", "1",time()+9000);
setcookie("RIGHTS", $rec["rights"],time()+9000);

【问题讨论】:

  • 你需要使用Javascript

标签: javascript php cookies session-cookies


【解决方案1】:

使用过期时间制作额外的 cookie

setcookie("expiration_time", time,time()+9000);

经过测试,这个cookie的时间

if( $_COOKIES['expiration_time'] + 60 < time() ){
   //... you alert code 
}

【讨论】:

    【解决方案2】:

    How to get cookie expiration date / creation date from javascript?

    这是不可能的。 document.cookie 包含这样的字符串信息:

    key1=value1;key2=value2;...
    

    所以没有关于日期的任何信息。

    您可以将过期时间传递给 javascript。一种方法是存储另一个 cookie,所以你有这个:

    $expireAt = time() + 9000;    
    setcookie("USERNAME", $user,$expireAt);
    setcookie("AUTHORID", $rec["id"],$expireAt);
    setcookie("AUTH", "1",$expireAt);
    setcookie("RIGHTS", $rec["rights"],$expireAt);
    setcookie("EXPIREAT", $expireAt, $expireAt);
    

    那么,这个函数获取cookie:(source)

    function getCookie(cname) {
      var name = cname + "=";
      var decodedCookie = decodeURIComponent(document.cookie);
      var ca = decodedCookie.split(';');
      for(var i = 0; i <ca.length; i++) {
        var c = ca[i];
        while (c.charAt(0) == ' ') {
          c = c.substring(1);
        }
        if (c.indexOf(name) == 0) {
          return c.substring(name.length, c.length);
        }
      }
      return "";
    }
    

    并设置一个计时器:

    let expireat = getCookie("EXPIREAT");
    if (expireat) {
      let timeAlert = Number(expireat) - 60;
      setTimeout(function() {
        // Do something
      }, timeAlert);
    }
    

    请记住,用户可以更改 cookie 的值。

    【讨论】:

      【解决方案3】:

      你需要在 javascript 中这样做。

      1. 服务器为 cookie 设置新的过期时间
      2. 执行超时的javascript
      3. 再次在页面重新加载 1,2
      // save minute before expiration
      setTimeout(saveWork, (9000-60)*1000);
      
      function saveWork(){
          // do your stuff
      }
      

      【讨论】:

        猜你喜欢
        • 2012-12-27
        • 1970-01-01
        • 2017-06-23
        • 2010-12-22
        • 2011-11-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多