0
error_reporting(-1); 
session_start(); 
$expire=time()+60*60;
setcookie('categories', $_SESSION['categories'], $expire);

このコードはCookieを設定する必要がありますが、そうではありません。Cookieが存在する場合、未定義のインデックスが通知されます。コードは問題ないと思います...

私はそれをページに入れました、2番目の行で、

なぜそれが機能しないのか誰もが知っていますか?:s

アップデート

今、私はコードを少し下に移動しました...それでも同じ状況で、未定義のインデックス

        $_COOKIE['newcoockievalu'] = json_encode($array);
    setcookie('newcoockievalu', json_encode($array), $expire);

    print "nocookie".($_COOKIE['newcoockievalu']);

このIF内のこれ

if (!isset($_COOKIE['newcoockievalu']))

アップデート

さらに奇妙なことに....エラーは発生しませんが、「issetは常にfalseである」と表示されます...しかし、$ _ COOKIE ['newcoockievalu']ok...が出力されます。

4

3 に答える 3

1

まず、E_ALL何が問題になっているのかわからないため、エラーレポートを有効にする必要があります。

ドキュメントによると:

setcookie()

この関数を呼び出す前に出力が存在する場合、setcookie()は失敗し、FALSEを返します。setcookie()が正常に実行されると、TRUEが返されます。これは、ユーザーがCookieを受け入れたかどうかを示すものではありません。

右。そうではありません。そのため、ブラウザがCookieを受け入れることができるかどうかを確認する必要があります。
さて、あなたはクッキーを扱う前cookieEnabledにオブジェクトのプロパティをチェックすることができます。navigator例えば、

<script type="text/javascript">

 if ( ! navigator.cookieEnabled ){
   //Cookies disabled
   //Do something like redirect to error page...
 }

</script>



<?php

// After you fix the problem, set this one to 0
error_reporting(E_ALL);

session_start();

function _setcookie($override = false){

  $key ='categories';
  $val = $_SESSION['categories']; 

  $expire=time()+60*60;

  //Did the one set before?
  if ( isset($_COOKIE[$key]) ){

     if ( $override ){
        //setcookie again here
     }

  } else {

      //Cookie wasn't defined so we'll do define:
      return setcookie($key, $value, $expire);
  }

}


function _getcookie($key){ 
  if ( isset($_COOKIE[$key]) ){
    return $_COOKIE[$key];
  }
  return null;
}


//Will set cookie if it doesn't not exists
_setcookie();

//Should print that key
print getcookie('categories');

?>
于 2012-11-05T12:29:10.257 に答える
1

私はあなたのコードをチェックしましたが、それは絶対に正しいです。2 番目のパラメーターは文字列でなければなりません。

文字列である必要があるセッション値から Cookie 名のカテゴリを設定していることを確認してください。次に、次のリロードでそこに表示されます.. :)

于 2012-11-05T11:51:40.333 に答える
0

$_COOKIE現在のリクエストではなく、次のリクエストの後にのみ入力されます。

于 2012-11-05T11:25:30.347 に答える