2012-03-16 13 views
1

私はこの機能を使ってクッキーを追加しています。ブラウザオプションのように完全に追加されています。なぜ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'); 

助けてください - 私は戻ってCodeIgniterのからクッキーを取得できますか?

+0

は、私のサーバーはlocalhostです忘れないでください:8000 – danny

+0

あなたはユーザ名のハッシュを保存しています。しかし、パスワードではありません! –

+0

CIバージョンは何ですか? –

答えて

7

クッキーを書き込むCI組み込み関数の問題。私が変更さは今私が

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

機能whith Cookieを設定していますし、

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

て戻ってそれを取得しているこの作品はいまいましい罰金です!

+0

私はOPと同じ問題を抱えていましたが、この勧告は最初の試みで修正されました。ありがとうDanny! – brianrhea

8

同じhttp要求でCookieを取得することはできません。 Cookieを設定したら、ブラウザにSet-Cookieヘッダーで送信する必要があります。また、httpトランザクションが完了するまでヘッダーを送信することはできません。そのブラウザがクッキーを取得した後、次のリクエストブラウザでサーバにCookieヘッダで送信します。

PHP.NET

から

クッキーはクッキーをすることも可能であるべきページの次の読み込みまで見えるようになりません。クッキーが正常に設定されたかどうかをテストするには、クッキーが期限切れになる前に、次のローディングページでクッキーが存在するかどうかを確認します。失効時間は、失効パラメータを介して設定されます。

したがって、次のページの読み込み時にCookieが利用可能になります。

+0

NB :CookieがChromeを使用して設定された同じページの読み込みでCookieを取得するのに問題はありませんでしたが、Safariに問題がありました。 – stormdrain

+0

サーバーの時刻が適切かどうか確認しましたか? –

+0

これはいいですが、私のMac上のローカルapache2なので、ブラウザと同じ時間を使っています。しかし、それは*そのような振る舞いではありません。* Chrome上でさえ、Cookieを表示するためにページをリフレッシュします。 :) – stormdrain

1

config.phpのCookie設定を確認してください。それらが間違って設定されている場合、クッキーは動作しません。あなたのコードを使用してローカルで私のデフォルトが機能します。

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

また、何かを暗号化する場合は、パスワードを暗号化する必要があります。 md5は使用しないでください。より安全なアルゴリズム[config.phpで暗号鍵を設定することを忘れないでください]を使用するCIの組み込み暗号化($this->encrypt->encode();)を使用してください。

0

バグがCodeIgniterの中にあります:クッキーを読み込むとき、それはあなたのcookie_prefixを使用していない(クッキーを書くとき、それはない)機能クッキー

2

で/system/core/Input.phpを参照してください、私が持っていましたCodeigniterには、ドキュメントに記載されている名前と値だけでなく、有効期限の値が必要であることがわかりました。私。 PHPのはsetcookieへの切り替え

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

set_cookie($cookie); 
0

()の代わりにCIのの$ this - >入力 - > set_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

これは、デフォルトで空文字列に設定された$ expireパラメータについてのset_cookie()関数の不正確な初期化によって引き起こされますが、タイムスタンプを無効にするため、デフォルトで0に設定する必要があります。

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

そして、このように設定されたCookie:システム/コア/ Input.phpであっ補正

ライン342で 見

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

0

まず、あなたはクッキーヘルパーを含めていることを確認してください。

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

出力をエコーのようなビューページでのコール= pradip

関連する問題