HTTP协议是一种无状态协议,这意味着你对网站的每一个请求都是独立的,而且因此无法通过它自身保存数据。但这种简单性也是它在互联网早期就广泛传播的原因之一。
不过,它仍然有一种方法能让你用cookies的形式来保存请求之间的信息。这种方法使你能够更有效率的进行会话管理和维持数据。
有两种处理cookies的方式—服务端(php,asp等)和客户端(javascript).在这个教程中,我们将学习到以php和javascript这两种方式如何去创建cookies。
Cookies and php
setting cookies
在php中创建cookie你需要用到setcookie这个方法。它需要些参数(除了第一个参数是必需的,其它参数都是可选的)
复制代码 代码如下:
setcookie(
'pageVisits', //cookie名字,必需的
$visited, //cookie的值
time()+7*24*60*60, //过期时间,设置为一个星期
'https://www.jb51.net/', //cookie可用的文件路径
'demo.tutorialzine.com' //cookie绑定的域名
)
如果过期时间设置为0(默认设置也是0),那么当浏览器重启时cookie将会丢失。
参数'https://www.jb51.net/'表示你域名下所有文件路径cookie都可以用(当然你也可以为它设置单一的文件路径,例:'/admin/')。
你还可以传给个这个函数别两个额外的参数,这里没有给出。它们被规定为boolean类型的。
第一个参数表示cookie仅在一个安全的HTTPS连接才运转,而第二个参数表示不能使用javascript操作cookie。
对大多数人来说,你只需要第四个参数,剩下的就忽略了。
reading cookies
用php读取cookie就简单多了。所有的传给脚本的cookies都在$_COOKIE这个超级全局数组里。
在我们的例子里,可以用下面的代码来读取cookies:
复制代码 代码如下:
$visits = (int)$_COOKIE['pageVisits']+1;
echo "You visited this site: ".$visits." times";
值得注意的地方是,当下一个页面加载好时,也可以用$_COOKIE来取得你用setcookie方法设置的cookies,
你应该意识到了什么。
deleting cookies
为了删除cookies,仅仅需要用setcookie函数为cookies设置一个已经过去时间做为过期就行了。
复制代码 代码如下:
setcookie(
'pageVisits',
$visited,
time()-7*24*60*60, //设置为前一个星期,cookie将会被删除
'https://www.jb51.net/',
'demo.tutorialzine.com'
)
Cookies and jQuery
在jquery中使用cookies,你需要一个插件Cookie plugin.
Setting cookies
用Cookie plug-in设置cookies是很直观的:
复制代码 代码如下:
$(document).ready(function(){
// Setting a kittens cookie, it will be lost on browser restart:
$.cookie("kittens","Seven Kittens");
// Setting demoCookie (as seen in the demonstration):
$.cookie("demoCookie",text,{expires: 7, path: 'https://www.jb51.net/', domain: 'demo.tutorialzine.com'});
// "text" is a variable holding the string to be saved
});
Reading cookies
读取cookie甚至更简单,只需要调用$.cookie()方法,给它一个cookie-name就可以了,这个方法会返回cookie的值:
复制代码 代码如下:
$(document).ready(function(){
// Getting the kittens cookie:
var str = $.cookie("kittens");
// str now contains "Seven Kittens"
});
Deleting cookies
删除cookie,只需要在次使得$.cookie()方法,把第二个参数设置为null就可以了。
复制代码 代码如下:
$(document).ready(function(){
// Deleting the kittens cookie:
var str = $.cookie("kittens",null);
// No more kittens
});
完整例子:
demo.php
复制代码 代码如下:
<?php
// Always set cookies before any data or HTML are printed to the page
$visited = (int)$_COOKIE['pageVisits'] + 1;
setcookie( 'pageVisits', // Name of the cookie, required
$visited, // The value of the cookie
time()+7*24*60*60, // Expiration time, set for a week in the future
'https://www.jb51.net/', // Folder path, the cookie will be available for all scripts in every folder of the site
'demo.tutorialzine.com'); // Domain to which the cookie will be locked
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>MicroTut: Getting And Setting Cookies With jQuery & PHP | Tutorialzine demo</title>
<link type="text/css" href="https://www.jb51.net/styles.css" mce_href="https://www.jb51.net/styles.css" />
<mce:script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js" mce_src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></mce:script>
<mce:script type="text/javascript" src="https://www.jb51.net/jquery.cookie.js" mce_src="https://www.jb51.net/jquery.cookie.js"></mce:script>
<mce:script type="text/javascript"><!--
$(document).ready(function(){
var cookie = $.cookie('demoCookie');
// If the cookie has been set in a previous page load, show it in the div directly:
if(cookie) $('.jq-text').text(cookie).show();
$('.fields a').click(function(e){
var text = $('#inputBox').val();
// Setting a cookie with a seven day validity:
$.cookie('demoCookie',text,{expires: 7, path: 'https://www.jb51.net/', domain: 'demo.tutorialzine.com'});
$('.jq-text').text(text).slideDown('slow');
e.preventDefault();
});
$('#form1').submit(function(e){ e.preventDefault(); })
})
// --></mce:script>
</head>
<body>
<h1>MicroTut: Getting And Setting Cookies With jQuery & PHP</h1>
<h2>Go Back <a href="https://tutorialzine.com/2010/03/microtut-getting-setting-cookies-jquery-php/" mce_href="https://tutorialzine.com/2010/03/microtut-getting-setting-cookies-jquery-php/">To The Tutorial »</a></h2>
<div>
<div><?php echo $visited?></div>
<p>The number above indicates how many times you've visited this page (PHP cookie). Reload to test.</p>
</div>