0

ランダムに追加されたボディ クラスを 1 回のブラウザー セッションまたは 1 日保存する Cookie を作成するにはどうすればよいでしょうか。私の意図は、すべてのユーザーにボディの背景画像をランダムに提供し、その画像を保存して、ページが再ロードされるたびに、またはページ 2 に移動したときに変更されないようにすることです。

サイトhttp://www.midnightlisteners.com/

私はこの jQuery プラグインを使用しています: https://github.com/carhartl/jquery-cookie

しかし、それはどういうわけか機能しません

私のjQueryコード:

私が使用するコード:

if($.cookie('userBackground') === null) {
    var classes = ['body-bg1','body-bg2', 'body-bg3', 'body-bg4'];
    var randomnumber = Math.floor(Math.random()*classes.length);
    var chosenClass = classes[randomnumber];
    $('body').addClass(chosenClass );
    $.cookie('userBackground', chosenClass, { expires: 7, path: '/' });
} else {
   //todo verify cookie value is valid
   $('body').addClass($.cookie('userBackground'));
}

私が得ているエラー:

Uncaught ReferenceError: require is not defined
Uncaught TypeError: Object function (a,b){return new e.fn.init(a,b,h)} has no method 'cookie'  

これを行う他の方法はありますか?php? 純粋なJavaScript?

4

1 に答える 1

1

アップデート:

セッションの長さだけ持続させたい場合は、代わりにセッションを使用してください。

<?php 
if(!isset($_SESSION['bgclass'])) {
   // lets make our cookie!
   $classes = array('body-bg1','body-bg2', 'body-bg3', 'body-bg4');

   $classIndex = array_rand($classes);

   $_SESSION['bgclass'] = $classes[$classIndex];

}       

$bgclass = $_SESSION['bgclass'];
?>

このようにして、セッションがタイムアウトするかブラウザが閉じられた後、ユーザーは新しい bgclass 値を取得します。


すでにphpを実行している場合は、そのようにします。可能であれば、このサーバー側を処理する方がはるかに優れています。それも少し簡単です:

<?php 
if(!isset($_COOKIE['bgclass'])) {
   // lets make our cookie!
   $classes = array('body-bg1','body-bg2', 'body-bg3', 'body-bg4');
   $expire = time()+(60*60*24); // expire 1 day form now
   $classIndex = array_rand($classes);

   $bgclass = $classes[$classIndex]; // had $class here as opposed to $classes

   setcookie('bgclass', $bgclass, $expire);

} else {
  $bgclass = $_COOKIE['bgclass'];
}
?>
<html>
  <head></head>
  <body class="<?php echo $bgclass ?>">
    ...
  </body>
</html>

覚えておくべき重要なことは、Cookie は本質的に応答ヘッダーであるため、ヘッダーが送信される前にこれを行う必要があるということです (つまり、php からのすべてがブラウザーに出力されます)。

于 2012-09-13T20:17:53.543 に答える