网站开发日志

2009年3月26日星期四

分享家:Addthis中国

cookie

cookie在网站开发里运用的很多,特别是购物网站。cookie可以分为两种,会话cookie(session cookie) 和持久cookie(presistent cookie)。在PHP里,当一个会话开始,服务器会在客户端的浏览器里设置一个cookie用来保存PHP session ID,而cookie的内容被存放在服务器端。会话cookie的有效期通常是持续到会话结束,也就是当你关闭浏览器后,但是你也可以在PHP.INI里改变会话的有效期。通常我们说的cookie是指持久cookie,它是完全保存在客户端的浏览器里,其有效期是在设置的时候定义好。在这篇文章里,我准备介绍持久cookie(以下简称cookie)。

cookie的运用涉及到信息的保存和提取,当然我们可以使用数据库来完成这项工作,但是对于一些小信息,比如email,使用cookie显得更加快捷。cookie是存在客户端的,因此首先想到的是使用Javascript来设置和提取cookie。W3Cschool上提供两个函数,使用它们基本上就可以满足我们的需要。我把它们稍作修改,如下:

// 全局变量
domain    = '.61dh.com'; //如果不设代表当前页面的域名
path    = '/'; //通常使用根目录,当然你可以可特指一个路径
secure    = 0; //对于SSL网站(https),需要设置安全cookie,这时可以把值设为‘1’
//setCookie,设置cookie,需要三个变量,cookie名称,cookie值,和有效时长
function setCookie(c_name,value,expiredays){
  var exdate=new Date();
  exdate.setDate(exdate.getDate()+expiredays);
  document.cookie=c_name+ "=" +escape(value)+
  ((domain.length > 0) ? ';domain=' + domain : '') +
  ((path) ? ';path=' + path : '') +
  ((secure) ? ';secure' : '') +
  ((expiredays==null) ? "" : ";expires="+exdate.toGMTString());
}
//getCookie,获取相关cookie的值
function getCookie(c_name){
  if (document.cookie.length>0){
    c_start=document.cookie.indexOf(c_name + "=");
    if (c_start!=-1){ 
      c_start=c_start + c_name.length+1; 
      c_end=document.cookie.indexOf(";",c_start);
      if (c_end==-1) c_end=document.cookie.length;
      return unescape(document.cookie.substring(c_start,c_end));
    } 
  }
  return "";
}

有了上面的函数,你就可以根据需要来保存一个数据(setCookie),然后再根据需要取回数据(getCookie), 例如:

setCookie('email',adamcai@live.com,365);//保存email,有效期365天
var email = getCookie('email');//获取email

另外一种方法是使用PHP,这要根据实际需要,有时你可能会觉得使用PHP更方便。PHP自带有函数:

setcookie(name,value,expire,path,domain,secure)
  • name:必须,cookie名称
  • value:必须,cookie值
  • expire:任择。指定的cookie时到期。单位是秒,例如: 3600 * 24 * 30将设置Cookie过期30天。如果此参数没有设置时,cookie将在会话结束时(当浏览器关闭)到期,
  • path:任择。指定服务器路径的Cookie如果设置为“ / ”时, cookie将可在整个域内有效。如果设置为“ /测试/ ”时, cookie将只在测试目录及所有子目录有效。默认值是当前目录。
  • domain:任择。指定域名的cookie 。为了使现有的cookie的所有子网域内有效,你应该将其设定为 ".example.com"。如果不设置,将使用当前页的域名。
  • secure:任择。指定是否cookie应用于安全的HTTPS连接。如果设为true,那么cookie将只可以在安全连接存在的情况下设定。默认值为false 。

$_COOKIE['name'] //用来获取cookie的值。

//设置cookie
setcookie("email","adamcai@live.com”, time()+3600*24); //时常为24小时
//获取cookie
if(isset($_COOKIE("email")){
  $email = $_COOKIE("email");
}

标签: ,

相关文章:

0 条评论:

发表评论

指向此帖子的链接: