2011-09-17 13 views
3

同じページにCookieを設定できません。私は私のサイトでクッキーを使用し、それは正常に動作し、私は別のファイルにPHPを設定する傾向があります。今、私は同じページにクッキーを設定していますが、動作していないようです。同じページにPHP Cookieを設定できません

$expire = time()+5; 
setcookie("rb_vote", 1, $expire); 

は、それが

if(isset($_COOKIE["rb_vote"])) { 
echo "IS SET";} 
else { 
echo "IS NOT SET"; } 

を設定されている場合、それは常に言うチェックが設定されていません。私はページの読み込みでこれをやってみましたが、まだ動作しません。

+0

@Pekkaが言ったように:クッキーは、ページ要求に、ブラウザから送信されます。したがって、setcookie()の後の次のリクエストで$ _COOKIEにしか表示されません。 – str

答えて

9

manual on setcookie()(強調鉱山)を参照してください:

クッキーが設定されていたら、彼らが$ _COOKIEや$ HTTP_COOKIE_VARS配列で、次のページのロードにをアクセスすることができます。 $ _COOKIEのようなスーパーグローバルは、PHP 4.1.0で利用可能になったことに注意してください。 Cookieの値も$ _REQUESTにあります

Hereは回避策の提案です。クッキーが実際に設定されていることを保証できないため、不完全ですが、あなたのケースでは可能性があります。

+0

PHPマニュアルにリンクしたコメントはもう存在しないようです。 – Jason

+0

@Jasonとすべてhttp://www.lmpx.com/nav/article.php/news.php.net/php.notes/169603/read/index.html – Paolo

+0

http://php.net/manual/ja /function.setcookie.php#98096あなたが掲示した回避策リンクのアンカーが存在しないようです。私はHTMLソースをチェックしました。ナダ。 –

2

バニラ・フォーラムでこの問題が発生しました。セッションが確立される前の最初のページの読み込みでは、セッションクッキーが作成されますが、アプリケーションがセッション変数にアクセスする(追加する)たびに$ _COOKIEの現在のセッションIDが検索されます。次のページが読み込まれるまで設定されません。

私の回避策は、クッキーの作成時に$ _COOKIE要素を手動で設定することです。

// Create a cookie to identify the session. 
// This line already exists. $Name is the cookie name. 
// $SessionID is a random md5 ID that has just been generated. 
setcookie($Name, $SessionID, $Expire, $Path, $Domain); 

// Set the cookie for the remainder of the page. This is a workaround. 
if (!isset($_COOKIE[$Name])) $_COOKIE[$Name] = $SessionID; 

この回避策は、ハッキングのビットのように感じているように私は、バニラ(https://github.com/vanillaforums/Garden/issues/1568)に障害としてこれを提起しましたが、それは確かに今の問題を回避しています。

PHP5.3バニラフォーラムバージョン2.0.18.4

+0

これは天才です。「クッキーは設定されたページで準備ができていません」という問題を完全に抱えています。よくやった! –

+0

偉大な、簡単な解決策... – Jason

関連する問題