CI框架存储cookie相关

2017/2/20

在ci框架中有3种方法可以设置cookie。

1.原生的php方法

bool setcookie ( string $name [, string $value = "" [, int $expire = 0 [, string $path = "" [, string $domain = "" [, bool $secure = false [, bool$httponly = false ]]]]]] )

相关的参数都比较明显

所以我们可以setcookie("username", 'xx');这样设置。

2.input方法

$this->input->set_cookie("username", 'xx',3600);

3.cookie辅助方法

$this->load->helper('cookie');
set_cookie("username", 'xx',3600);

在使用CI框架自带的这个方法的时候需要注意,如果版本是3.1.3或者其他版本(自己需要试试)在使用方法2和3的时候一定需要填写销毁时间,不然不能正常设置cookie。

其实看代码我们可以发现方法3是调用方法2,方法2调用的是方法1,在调用的过程中进行了一些设置,可以方便使用。

在system/core/Input.php文件中,我们可以看到

if ( ! is_numeric($expire)) {
  $expire = time() - 86500;
}velse {
  $expire = ($expire > 0) ? time() + $expire : 0;
}
1
2
3
4
5

所以当我们没有给$this->input->set_cookie($name, $value = '', $expire = '', $domain = '', $path = '/', $prefix = '', $secure = FALSE, $httponly = FALSE)传递$expire参数的时候是不能正常设置参数的,因为这个方法调用的是php自带的setcookie()方法,在这个方法中,$expire可以传一个time()+的时间表示多久销毁,如果不传或者设置为0的话则表示当前会话,随浏览器关闭而销毁。但是不能传一个time()-的时间,不然就没有实际意义,浏览器也不会存储这个cookie的。

所以要设置cookie的需要注意了,一定要加$expire参数,不然是设置不成功的。