//写cookies
function setCookie(name,value)
{
var Days = 30
var exp = new Date()
exp.setTime(exp.getTime() + Days*24*60*60*1000)
document.cookie = name + ”=”+ escape (value) + ”expires=” + exp.toGMTString()
}
//读取cookies
function getCookie(name)
{
var arr,reg=new RegExp(”(^| )”+name+”=([^]*)(|$)”)
if(arr=document.cookie.match(reg)) return unescape(arr[2])
else return null
}
//删除cookies
function delCookie(name)
{
var exp = new Date()
exp.setTime(exp.getTime() - 1)
var cval=getCookie(name)
if(cval!=null) document.cookie= name + ”=”+cval+”expires=”+exp.toGMTString()
}
//使用示例
setCookie(”name”,”hayden”)
alert(getCookie(”name”))
//如果需要设定自定义过期时间
//那么把上面的setCookie 函数换成下面两个函数就ok
//程序代码
function setCookie(name,value,time){
var strsec = getsec(time)
var exp = new Date()
exp.setTime(exp.getTime() + strsec*1)
document.cookie = name + ”=”+ escape (value) + ”expires=” + exp.toGMTString()
}
function getsec(str){
alert(str)
var str1=str.substring(1,str.length)*1
var str2=str.substring(0,1)
if (str2==”s”){
return str1*1000
}else if (str2==”h”){
return str1*60*60*1000
}else if (str2==”d”){
return str1*24*60*60*1000
}
}
//这是有设定过期时间的使用示例:
//s20是代表20秒
//h是指小时,如12小时则是:h12
//d是天数,30天则:d30
//暂时只写了这三种
setCookie(”name”,”hayden”,”s20″)
了解一下cookie的创建与删除机制创建:
由header中的setcookie创建,由js创建等
删除:
当打开一个页面后,浏览器先检查cookie的有效期,过期就删除cookie
但如果你没有重新打开含过期cookie的页面,则cookie永远不会过期,就是说cookie不会自己主动被删除,而是在访问时发现已过期才会被删除
你这个代码都在一个页面,只有在页面载入时检测cookie是否过期,所以仍能够读取到过期的cookie
最近发现Safari cookie过期很快,一开始以为是cookie操作脚本有问题,百度了一圈也没发现有类似的问题。研究了很久,同样的操作脚本用Chrome/Edge设置的cookie有效期就是正常的。确定是Safari的问题,于是又去Google搜了一下,发现确实有这回事。
从2019年上半年开始,iOS 12.2 上的Safari和macOS Mojave系统内置的Safari 12.1均采用了新的ITP2.1(智能跟踪预防)新版本。在这个新策略中,Safari进一步限制了cookie在浏览器上的应用。几个关键点:
另外,现在ITP已经升级到2.2(见参考资料)。
1. 文中描述该限制针对的是客户端Cookie,若尝试通过HTTP响应来设置cookie是否会有不同?
2. 考虑使用浏览器指纹功能?
3. 考虑要求用户登陆?
4. 一些欺骗“智能”检测规则的**操作(参考参考资料1)