SafariWebkit浏览器下,js设置Cookie有效期最长为7天的问题

JavaScript014

SafariWebkit浏览器下,js设置Cookie有效期最长为7天的问题,第1张

最近发现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)

//JS操作cookies方法!

//写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″)

你是用户还是开发者啊 要是用户不想使用自动登录就把浏览器的安全级别设置成最高 保证会让你很满足 一天登录n次你就会享受输n次密码的快感。

如果是开发者那就可以两种方式设置cookie有效期了:javascript设置和服务器脚本语言设置(有php或者java或者asp或者.NET)

js是这样设置的:

function zxmcook(name,value,time){ //函数名字自己随意定义,zxm是哥哥我名字,你就不要郁闷了

var exp=new Date()

exp.setTime(exp.getTime()+time*60*24*60*1000)//这里的time就是天数

document.cookie=name+"="+escape(value)+"expires="+exp.toGMTString()

}

zxmcook("mn","zxm",1)//这就是一天

ok就这样了 累死我了

然后php或者java或者asp或者.NET就不说了 并且每个人只会选择一种的,哥不愿意说了半天咱两跑偏了 我搞的是php,结果你是java那样多尴尬啊,不过我怎么现在感觉怪怪的,你如果是开发者不会为了搞清楚个cookie跑这儿问半天,网上一搜就是一片,所以我预感咱两百分之90都跑偏了