浏览器cookie.以及用于实现相同效果的其他选项


browser cookie. and other options for achieve the same effect

如何创建一个cookie,为一个浏览器会话或一天存储随机添加的body类。我的意图是随机给每个用户一个身体背景图像,然后存储该图像,这样它就不会在每次重新加载页面或转到第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?

更新:

如果你想让它只持续会话的长度,那么只需使用会话即可:

<?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中的任何内容都会输出到浏览器)。