【问题标题】:codeigniter cookie expiry problemcodeigniter cookie过期问题
【发布时间】:2019-08-06 17:54:09
【问题描述】:

我遇到了 cookie 问题,我的 cookie 上的到期日期总是设置为在会话结束时,这不是我想要的。我做了一些凝视,它建议将过期时间设置为 time()+60*60*24*30 我已经完成了。

 //Create basket cookie
            $cookie = array(
                'name'   => 'basket_id',
                'value'  => $basket_id,
                'expire' => time()+60*60*24*30,
                'domain' => 'domain',
                'path'   => '/',
                'prefix' => '',
            );
            set_cookie($cookie);

我确实想知道它是否可以归结为 Codeignter 设置,但我的 ci_session cookie 有一个正常的到期日期。格林威治标准时间 2011 年 6 月 9 日星期四 10:39:02

这是我查看 cookie 时得到的:

 Name   basket_id
 Value  28
 Host   .host
 Path   /
 Secure No
 Expires    At End Of Session

这是我传递给 cookie 的数组示例。

Array ( [name] => basket_id [value] => 30 [expire] => 1310202067 [domain] => host [path] => / [prefix] => ) 

【问题讨论】:

    标签: codeigniter cookies


    【解决方案1】:

    您的到期日期设置不正确。 您不必包含 time(),因为您设置的实际上是 time() 的到期日期。

    当过期值不正确时,它默认为 0,而是设置为会话的长度。

    因此应该是:

                $cookie = array(
                'name'   => 'basket_id',
                'value'  => $basket_id,
                'expire' => 86400*30,
                'domain' => 'domain',
                'path'   => '/',
                'prefix' => '',
            );
    

    【讨论】:

      【解决方案2】:

      请查看@Gowri 的answer below,了解如何正确操作。

      您可以尝试在config.phpCI会话中调整会话过期时间最初保存在cookies中:

      /** Session Variables
       ---------------------------------------
      | 'session_expiration'  = the number of SECONDS you want the session to last.
      |  by default sessions last 7200 seconds (two hours).  Set to zero for no expiration.
      |
      */
      
      $config['sess_expiration']      = 7200;
      

      【讨论】:

      • 我认为这并不能真正回答问题。关于为什么直接设置 cookie 过期变量不会产生反映手动设置的 cookie 过期日期的输出,调整会话过期时间并不是真正的解决方案。相反,请阅读这个对我有用的解决方案:stackoverflow.com/a/15886879/1351605
      • 我同意你的观点,如果你想保存一些在会话过期后会持续存在的信息怎么办,因此,答案是错误的,@sn0r 答案是一个更好的答案。
      • 这不是正确答案,这个答案只会让所有用户感到困惑和分心,只需编辑或删除它,它与问题无关。
      • 看下面@sn0r https://stackoverflow.com/a/29021501/7719176的正确答案
      【解决方案3】:

      你可以添加参数

      $config['cookie_lifetime']  = 1800
      

      在config.php中,原因可以在libraries/Sessions/Session.php中找到,代码如下

      $expiration = config_item('sess_expiration');
      
      if (isset($params['cookie_lifetime']))
      {
          $params['cookie_lifetime'] = (int) $params['cookie_lifetime'];
      }
      else
      {
          $params['cookie_lifetime'] = (!isset($expiration) && config_item('sess_expire_on_close'))
              ? 0 : (int) $expiration;
      }
      

      【讨论】:

        猜你喜欢
        • 2011-08-17
        • 2019-07-28
        • 2011-10-10
        • 1970-01-01
        • 1970-01-01
        • 2020-06-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多