如何创建一个cookie,用于存储一个浏览器会话或一天的随机添加的body类。我的目的是随机地为每个用户提供一个正文背景图像,然后存储该图像,这样它就不会改变每次页面重载或转到第2页。
网站http://www.midnightlisteners.com/
我正在使用这个jQuery plugIn: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?
答案 0 :(得分: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输出到浏览器的任何内容)。