2011-12-06 5 views
0

setcookie thinkphpフレームワークで使用すると機能しません。ちょうど$a = setcookie('a','a');パスがないドメイン。 var_dump($a)はこれ以前には出力されず、警告も出力されません。bool(false);thinkppフレームワークで使用すると、PHP setcookieがfalseを返します。

しかし、私がフレームワークを使用しなかったとき、それは動作します。

+5

目は 'error_reporting'を有効にしてください何のヘッダをしないようにしてください'setcookie'の前に送られます。 –

答えて

0

データを送信する前にクッキーを設定する必要があります。エコーの前など。したがって、フレームワークには独自のCookieハンドラがある可能性があります。そのドキュメントを確認してください。

それとも、拡張子を使用することができます。

<?php 
// +---------------------------------------------------------------------- 
// | ThinkPHP [ WE CAN DO IT JUST THINK IT ] 
// +---------------------------------------------------------------------- 
// | Copyright (c) 2009 http://thinkphp.cn All rights reserved. 
// +---------------------------------------------------------------------- 
// | Licensed (http://www.apache.org/licenses/LICENSE-2.0) 
// +---------------------------------------------------------------------- 
// | Author: liu21st <[email protected]> 
// +---------------------------------------------------------------------- 
// $Id$ 

/** 
+------------------------------------------------------------------------------ 
* Cookie管理类 
+------------------------------------------------------------------------------ 
* @category Think 
* @package Think 
* @subpackage Util 
* @author liu21st <[email protected]> 
* @version $Id$ 
+------------------------------------------------------------------------------ 
*/ 
class Cookie extends Think 
{ 
    static function is_set($name) { 
     return isset($_COOKIE[C('COOKIE_PREFIX').$name]); 
    } 

    static function get($name) { 
     $value = $_COOKIE[C('COOKIE_PREFIX').$name]; 
     $value = unserialize(base64_decode($value)); 
     return $value; 
    } 

    static function set($name,$value,$expire='',$path='',$domain='') { 
     if($expire=='') { 
      $expire = C('COOKIE_EXPIRE'); 
     } 
     if(empty($path)) { 
      $path = C('COOKIE_PATH'); 
     } 
     if(empty($domain)) { 
      $domain = C('COOKIE_DOMAIN'); 
     } 
     $expire = !empty($expire)? time()+$expire : 0; 
     $value = base64_encode(serialize($value)); 
     setcookie(C('COOKIE_PREFIX').$name, $value,$expire,$path,$domain); 
     $_COOKIE[C('COOKIE_PREFIX').$name] = $value; 
    } 

    static function delete($name) { 
     Cookie::set($name,'',time()-3600); 
     unset($_COOKIE[C('COOKIE_PREFIX').$name]); 
    } 

    static function clear() { 
     unset($_COOKIE); 
    } 
} 
?> 
+0

'Cookie'オブジェクトはフードの下で' setcookie() 'を使っているだけです(' set() 'メソッドを参照)ので、クッキーを設定する前に出力を送らないようにする必要があります。 – Trott

+0

これはうまくいきません。とにかくありがとうございました。 –

2

documentation for setcookie()は、「出力はこの関数を呼び出す前に存在している場合、はsetcookie()が失敗するとFALSEを返します。」と述べていますしたがって、setcookie()をSTDOUTに書き込む可能性のある文の前に置くようにしてください。

この場合、PHPはエラーログに警告を記録します。「PHP警告:ヘッダー情報を変更できません - すでに送信されたヘッダー...」エラーログファイルを確認します。

+0

しかし、何も警告しません。 setcookieの前に何か出力があったら警告が出ると思います。ありがとうございました。 –

+1

エラーログに次の警告が記録されます: "PHP警告:ヘッダー情報を変更できません - 既に送信されたヘッダー..."エラーログファイルを確認してください。 – Trott

-3

cuz thinkphpでクッキーを使用したい場合はthinkphp関数のクッキーを書き換えます。クッキー(名前、値)を書く必要があります。中国 QQから

:1720036678

0

使用クッキー( "名前"、 "値"、時間)

時間は任意であり、

+0

あなたは*なぜ*問題を解決するか説明する必要があります –

関連する問題