我使用此功能添加cookie,它在浏览器选项中可以看到完美添加。
function login($username,$password){
$cookieUsername = array(
'name' => 'user',
'value' => md5($username),
'expire' => time()+1000,
'path' => '/',
'secure' => TRUE
);
$cookiePassword = array(
'name' => 'pass',
'value' => $password,
'expire' => time()+1000,
'path' => '/',
'secure' => TRUE
);
$this->input->set_cookie($cookieUsername);
$this->input->set_cookie($cookiePassword);
}
我无法从此函数中取回cookie:
echo $this->input->cookie('user');
请帮忙 - 如何从CodeIgniter获取cookie?
CI内置函数编写cookie的问题。我改变的是现在我正在设置饼干
setcookie($name,$value,$expire,$path);
功能并让它重新通过
$this->input->cookie('user',TRUE);
这是件好事!
public function cookie()
{
$this->load->helper('cookie');
$name = 'user';
$value = 'pradip';
$expire = time()+1000;
$path = '/';
$secure = TRUE;
setcookie($name,$value,$expire,$path);
$this->load->view('welcome_message');
}
在echo $this->input->cookie('user');
这样的视图页面中调用
output = pradip
Codeigniter
,在其代码中,已经添加time()
到期,因此您不需要在cookie配置中添加time()
。
更改:
'expire' => time()+1000
至:
'expire' => 1000
还可以使用程序样式cookie辅助函数(如set_cookie, get_cookie, delete_cookie..
),因为它们会自动添加cookie前缀配置,而使用OOP($this->input->set_cookie etc.
)时,您每次都必须手动输入cookie前缀配置。
您无法在同一个http请求中获取cookie。设置cookie后,必须通过Set-Cookie
标头将其发送到浏览器。在http事务完成之前,您无法发送标头。之后浏览器将获取cookie,并在下一个请求时,浏览器将通过Cookie
标头将其发送到服务器。
来自PHP.NET
在下一次加载可以看到cookie的页面之前,Cookie不会显示。要测试cookie是否已成功设置,请在cookie过期前检查下一个加载页面上的cookie。过期时间通过expire参数设置。
因此,cookie将在下一页加载时可用。
我遇到了这个问题,发现Codeigniter需要一个到期值,而不仅仅是文档中所述的名称和值。即
$cookie = array(
'name' => 'logged',
'value' => 1,
'expire' => '86500',
);
set_cookie($cookie);
切换到PHP的setcookie()
而不是CI的$this->input->set_cookie()
对我不起作用;在下一个请求之前,cookie仍然无法使用。这是有道理的,因为CI的方法实际上生成了setcookie()
,因此它们在功能上是等价的。但是,通过执行以下操作,我能够立即开始工作:
//this is the original code, which is made available next request:
$this->input->set_cookie('foo', 'bar', 86500);
//this is what I added, to make the cookie available immediately:
$_COOKIE['foo'] = 'bar';
希望能帮助别人。
检查config.php cookie设置。如果设置错误,cookie将无法正常工作。默认设置适用于本地使用您的代码
$config['cookie_prefix'] = '';
$config['cookie_domain'] = '';
$config['cookie_path'] = '/';
另外,如果你要加密任何东西,你应该加密密码。你不应该使用md5。使用CI的内置加密($this->encrypt->encode();
),它使用更安全的算法[不要忘记在config.php中设置加密密钥]。
这是由于函数set_cookie()关于$ expire参数的初始化不正确引起的,默认情况下设置为空字符串,但默认情况下必须设置为0,因为它不存在时间戳。看那里纠正
系统/核心/ Input.php上的342行
https://github.com/diegomariani/CodeIgniter/commit/64ac9e711100605f41a3b37bc897a12063fed70b
检查config.php中的cookie_secure指令。对于非https域,它必须为FALSE。
如果domain不是https且在config.php中将cookie_secure设置为TRUE,则不会设置cookie。更改为FALSE,它将在http和https中设置。
codeigniter中有一个错误:它在读取cookie时没有使用你的cookie_prefix(当编写cookie时,它确实如此)在函数cookie中看到/system/core/Input.php
首先确保你包括cookie帮助:
$this->load->helper('cookie');
并像这样设置cookie:
set_cookie($cookie_name, $value, $time);