setcookie
thinkphpフレームワークで使用すると機能しません。ちょうど$a = setcookie('a','a');
パスがないドメイン。 var_dump($a)
はこれ以前には出力されず、警告も出力されません。bool(false);
thinkppフレームワークで使用すると、PHP setcookieがfalseを返します。
しかし、私がフレームワークを使用しなかったとき、それは動作します。
setcookie
thinkphpフレームワークで使用すると機能しません。ちょうど$a = setcookie('a','a');
パスがないドメイン。 var_dump($a)
はこれ以前には出力されず、警告も出力されません。bool(false);
thinkppフレームワークで使用すると、PHP setcookieがfalseを返します。
しかし、私がフレームワークを使用しなかったとき、それは動作します。
データを送信する前にクッキーを設定する必要があります。エコーの前など。したがって、フレームワークには独自の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);
}
}
?>
'Cookie'オブジェクトはフードの下で' setcookie() 'を使っているだけです(' set() 'メソッドを参照)ので、クッキーを設定する前に出力を送らないようにする必要があります。 – Trott
これはうまくいきません。とにかくありがとうございました。 –
documentation for setcookie()
は、「出力はこの関数を呼び出す前に存在している場合、はsetcookie()が失敗するとFALSEを返します。」と述べていますしたがって、setcookie()
をSTDOUTに書き込む可能性のある文の前に置くようにしてください。
この場合、PHPはエラーログに警告を記録します。「PHP警告:ヘッダー情報を変更できません - すでに送信されたヘッダー...」エラーログファイルを確認します。
しかし、何も警告しません。 setcookieの前に何か出力があったら警告が出ると思います。ありがとうございました。 –
エラーログに次の警告が記録されます: "PHP警告:ヘッダー情報を変更できません - 既に送信されたヘッダー..."エラーログファイルを確認してください。 – Trott
cuz thinkphpでクッキーを使用したい場合はthinkphp関数のクッキーを書き換えます。クッキー(名前、値)を書く必要があります。中国 QQから
:1720036678
使用クッキー( "名前"、 "値"、時間)
時間は任意であり、
あなたは*なぜ*問題を解決するか説明する必要があります –
目は 'error_reporting'を有効にしてください何のヘッダをしないようにしてください'setcookie'の前に送られます。 –