2012-03-16 21 views
1

我使用这个函数来添加cookie,它可以完美添加,因为我可以在浏览器选项中看到它。为什么cookie不能在CodeIgniter中工作?

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); 

} 

我无法找回这个函数饼干:

echo $this->input->cookie('user'); 

请帮助 - 我怎样才能从饼干笨了?

+0

请记住我的服务器为localhost:8000 – danny 2012-03-16 20:13:54

+0

您保存的用户名的哈希值。但不是密码! – 2012-03-16 20:17:17

+0

你的CI版本是什么? – 2012-03-16 20:19:15

回答

7

它在编写cookie的函数中内置了CI的问题。我改变了,现在我设置cookie的蒙山

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

函数获得回通过

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

这是工作该死的罚款!

+0

我和OP有同样的问题,这个建议在第一次尝试的时候解决了它。谢谢丹尼! – brianrhea 2013-04-17 17:47:18

8

您无法在同一个http请求上获取cookie。一旦你设置了一个cookie,它必须通过Set-Cookie标题发送给浏览器。在http事务完成之前,您无法发送标题。之后,浏览器将获得cookie,并在下一个请求浏览器将通过Cookie标题发送到服务器。

从PHP.NET

饼干不会成为可见,直到一个页面,该Cookie应该是可见的未来负载。要测试cookie是否设置成功,请在cookie过期之前在下一个加载页面上检查cookie。过期时间通过expire参数设置。

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

+0

NB :我在使用Chrome设置Cookie的同一页面加载Cookie时没有问题,但Safari确实存在问题。 – stormdrain 2012-03-16 20:45:43

+0

您是否检查您的服务器时间是否合适? – 2012-03-16 20:49:23

+0

嗯,不,但它是我Mac上的本地apache2,因此它使用与浏览器相同的时间。然而,它*不是*的行为方式......它*会刷新页面以显示cookie - 即使在Chrome上也是如此。 :) – stormdrain 2012-03-16 20:54:37

1

检查你的config.php cookie设置。如果它们设置错误,Cookie将不起作用。默认值在我的本地使用您的代码

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

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

0

有CI中的一个错误:读取cookie时不使用你的cookie_prefix(写入cookie时,它不)见/system/core/Input.php在功能上的cookie

2

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

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

set_cookie($cookie); 
0

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

希望帮助别人。

0

首先确保你是包括饼干帮手:

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

并设置cookie的是这样的:

set_cookie($cookie_name, $value, $time); 
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'); 

} 

呼叫视图页状回声$this->input->cookie('user');

输出=普拉迪普

相关问题