情况如下:
同一个域名www.XXX.com下面有三个前端项目
路径分别为
www.XXX.com/demo1
www.XXX.com/demo2
www.XXX.com/demo3
此时,每个单独的项目有其单独的cookie来存储对应的数据(互不干扰)

项目中的人员前期使用以下方法来设置cookie的path
import cookie from 'js-cookie'
const getCookiePath = () => {
const {origin, pathname} = location
return origin + pathname + (pathname === '/' ? 'store' : '')
}
let path = this.getCookiePath()
cookie.set('token', state.token, {path})
这样,产生的cookie字符串为
token=XXX;path=www.XXX.com/demo3
(注意,path后面跟的是全路径)
以上cookie字符串放入 document.cookie 中
在chrome中是可以的 没有问题 好像是chrome自动把域名和项目名给拆分了
但是在safari浏览器中就存不上
导致在safari登录时获取的token无法放入cookie,导致登录失败
解决方案
cookie的path属性不应该按以上方法写
应该按如下方式
import cookie from 'js-cookie'
cookie.set('token', state.token, {path:'/demo1'})
假如是demo1,cookie字符串应该是
token=XXX;path=/demo1
即可
经测试,该方式达到的效果和最初项目人员使用的方法一致,且可以再safari浏览器中使用。
网友评论