为什么cookie不能在CodeIgniter中运行?

问题描述 投票:4回答:11

我使用此功能添加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?

php codeigniter cookies
11个回答
9
投票

CI内置函数编写cookie的问题。我改变的是现在我正在设置饼干

setcookie($name,$value,$expire,$path); 

功能并让它重新通过

$this->input->cookie('user',TRUE); 

这是件好事!


0
投票
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


0
投票

Codeigniter,在其代码中,已经添加time()到期,因此您不需要在cookie配置中添加time()

更改:

 'expire' => time()+1000

至:

'expire' => 1000

还可以使用程序样式cookie辅助函数(如set_cookie, get_cookie, delete_cookie..),因为它们会自动添加cookie前缀配置,而使用OOP($this->input->set_cookie etc.)时,您每次都必须手动输入cookie前缀配置。


8
投票

您无法在同一个http请求中获取cookie。设置cookie后,必须通过Set-Cookie标头将其发送到浏览器。在http事务完成之前,您无法发送标头。之后浏览器将获取cookie,并在下一个请求时,浏览器将通过Cookie标头将其发送到服务器。

来自PHP.NET

在下一次加载可以看到cookie的页面之前,Cookie不会显示。要测试cookie是否已成功设置,请在cookie过期前检查下一个加载页面上的cookie。过期时间通过expire参数设置。

因此,cookie将在下一页加载时可用。


3
投票

我遇到了这个问题,发现Codeigniter需要一个到期值,而不仅仅是文档中所述的名称和值。即

$cookie = array(
'name'  => 'logged',
'value'  => 1,
'expire' => '86500',
);

set_cookie($cookie);

2
投票

切换到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';

希望能帮助别人。


1
投票

检查config.php cookie设置。如果设置错误,cookie将无法正常工作。默认设置适用于本地使用您的代码

$config['cookie_prefix']    = '';
$config['cookie_domain']    = '';
$config['cookie_path']      = '/';

另外,如果你要加密任何东西,你应该加密密码。你不应该使用md5。使用CI的内置加密($this->encrypt->encode();),它使用更安全的算法[不要忘记在config.php中设置加密密钥]。


1
投票

这是由于函数set_cookie()关于$ expire参数的初始化不正确引起的,默认情况下设置为空字符串,但默认情况下必须设置为0,因为它不存在时间戳。看那里纠正

系统/核心/ Input.php上的342行

https://github.com/diegomariani/CodeIgniter/commit/64ac9e711100605f41a3b37bc897a12063fed70b


1
投票

检查config.php中的cookie_secure指令。对于非https域,它必须为FALSE。

如果domain不是https且在config.php中将cookie_secure设置为TRUE,则不会设置cookie。更改为FALSE,它将在http和https中设置。


0
投票

codeigniter中有一个错误:它在读取cookie时没有使用你的cookie_prefix(当编写cookie时,它确实如此)在函数cookie中看到/system/core/Input.php


0
投票

首先确保你包括cookie帮助:

$this->load->helper('cookie');

并像这样设置cookie:

set_cookie($cookie_name, $value, $time);
© www.soinside.com 2019 - 2024. All rights reserved.