设置cookie
当我们需要设置一个cookie时,需要像下面这样写:
document.cookie="my_cookie_name=my_cookie_value;expires=toDate;domain=www.baidu.com;path=/"
上面的代码中,我们通过“my_cookie_name=my_cookie_value”这一字段指定了cookie名“my_cookie_name”和cookie值“my_cookie_value”,expires 指定 cookie 过期时间是“toDate”,注意 “toDate” 必须是UTC时区的时间字符串 (可以通过Date.prototype.toUTCString()转换得到),domain 指定该 cookie 支持的域,path 指定 cookie 的有效路径。 上面的代码可以这样解读:我设置了一个名为 my_cookie 的 cookie,它在 www.baidu.com 的所有路径下都有效(path 指定为 ‘/’时表示所有路径有效,如果指定为‘/api’则表示仅在‘/api’下的所有路径有效),它会在 toDate 这个时间失效。
我们尝试自己封装一个 setCookie 方法来简化上面复杂的操作
/**
*
* @param {string} cname cookie名
* @param {string} cvalue cookie值
* @param {number} exdays 有效天数
* @param {string} domain 有效域
* @param {string} path 有效路径
*/
function setCookie(cname,cvalue,exdays, domain, path){
var d = new Date()
d.setTime(d.getTime()+(exdays*24*60*60*1000))
var expires = "expires="+d.toUTCString()
var path_ = path ? "path=" + path : "path=/",domain_ = domain ? "domain=" + domain + ';' : ';'
document.cookie = cname + "=" + cvalue + "; " + domain_ + expires + "; " + path_
}
删除 cookie
我们可以通过修改 cookie 过期时间的方式来删除 cookie。因为我们已经实现了 setCookie 方法,所以 删除cookie 会很容易做到。
/**
*
* @param {string} cname 需要删除的cookie名
*/
function clearCookie(cname) {
setCookie(cname, '', -1)
}
获取cookie
如果使用 document.cookie 来获取 cookie 值,你会发现你将获取到所有 cookie 名和 cookie 值连接成的字符串,如下
'PHPSESSID=ciopf5ctf0irv930s3q0dnadu7; country_id=45; _ga=GA1.2.1256568076.1608083163;'
我们通过正则表达式来匹配它
function getCookie(name) {
const reg = new RegExp('(^| )'+ name + '=([^;]*)(;|$)')
if (arr = document.cookie.match(reg)) {
return arr[2]
} else {
return ''
}
}