(1)Cookie基本属性
浏览器脚本操作还是服务器端脚本,都可以设置Cookie,浏览器脚本典型的有JavaScript,服务器端编程脚本有php、jsp等等,Cookie属性一览
name | Cookie的名称 |
value | Cookie的值 |
expire | Cookie有效期 |
path | Cookie保存的目录 |
domain | Cookie所在域 |
secure | Cookie是否只能在https协议下使用,默认http和https下都可以使用 |
httponly | Cookie是否只能通过http协议操作,此处http是泛指(还包括https)。 如果设置为true,则javascript脚本是不能操作cookie的 |
注意后两项只能在服务器端设置,否则如果用 javascript 脚本设置了,那这个属性还有什么意义。。。
(2)javascript 操作Cookie
设置cookie
function addcookie(name, value, expireHours, domain, path) {
var cookieString = name + "=" + escape(value);
// 设置有效期,推荐设置
// 有效期一般使用GMT格式时间,普通时间形如 2014-01-21 10:50:39
// GMT 格式的则为 21 Jan 2014 10:50:39 GMT
if (expireHours > 0) {
var date = new Date();
date.setTime(date.getTime() + expireHours * 3600 * 1000);
cookieString = cookieString + ";expire=" + date.toGMTString();
}
// 设置域,推荐设置,并且域范围不能过大
if (undefined !== domain) {
cookieString = cookieString + ";domain=" + domain;
}
// 设置cookie保存路径,推荐设置,并且明确范围最好
if (undefined !== path) {
cookieString = cookieString + ";path=" + path;
}
// 通过js脚本设置cookie
// cookie 串的形式如
// name=user; value=baidu; expire=21 Jan 2014 10:50:39 GMT; domain=baidu.com; path=/test/
document.cookie = cookieString;
}
获取所有Cookie,本例返回json对象:以cookie名称作为key,cookie的值作为value
function getAllCookie() {
// cookie串中间包含有空格,比如 username=baidu, domain=baidu.com
// 去掉空格并且根据 ; 分组 得到所有cookie
var cookieArr = document.cookie.replace(/ /g, '').split(';');
var cookieJosn = {};
for (var index in cookieArr) {
var itemArr = cookieArr[index].split('='); // itemArr 就是单个cookie了,比如 user=baidu
cookieJosn[itemArr[0]] = itemArr[1];
}
return cookieJosn;
}
根据cookie名称获取cookie
function getCookie(cookieName){
return getAllCookie()[cookieName];
}
根据cookie名称删除cookie
function delCookie(cookieName) {
// 删除cookie就是把cookie有效期设置为过去时间
var cookieVal = getCookie(cookieName);
document.cookie = cookieName + '=' + cookieVal + ';expire=' + (new Date().getTime() - 1);
}
(3)php设置cookie
php设置cookie,只需调用setcookie函数即可,各个参数与前文表格列出来的一一对应
setcookie($name, $value, $expire, $path, $domain, $secure, $httponly);
但是设置cookie之前不能有任何输出,即任何echo或者print语句都不行
/**
* $name:cookie名称。除了 $name 是必填参数,其他都有默认的缺省值
* $value:cookie值,缺省值为 null
* $expire:cookie有效时间,单位秒。不设置则表示在当前会话期间有效,cookie保存在内存中,关闭浏览器之后cookie就失效了
* $path:cookie保存的目录,如果设置为 / ,则在整个domain(域名)内都有效。如果设置为 /a/则在domain下的 /a/ 目录有效
* $domian:cookie所在的域名,比如设置为 cnsuning.com 表示在这个站点以及所有子站点下均有效
* $secure:cookie是否只能通过https链接,默认值是false,表示在http和https协议下都能使用
* $httponly:cookie是否只能在http(包括https)协议访问,默认值false。表示一般的脚本比如javascript也能操作cookie
*
*/
setcookie('user', 'hello', time()+3600, '/', 'baidu.com',false,false);
(4)jsp设置cookie
<%
Cookie cookie = new Cookie("user", "baidu");
cookie.setDomain("baidu.com");
cookie.setPath("/demo/");
cookie.setHttpOnly(false);
cookie.setSecure(false);
cookie.setMaxAge(60 * 10); // 有效期10分钟
response.addCookie(cookie);
%>