koajs 开发时设置的cookie在浏览器无法读取

    最近在用koajs进行开发,其他的都比较顺利,但是用到cookies时遇到了一个问题,如果是服务器读取cookie是没有任何问题的,但是如果是在浏览器读取cookie却出现问题了。

    设置cookie用的是官方提供的方法

this.cookies.set('name', 'tobi');
    但是问题来了,这样设置在调试工具里面是可以看到cookie的,但问题是用js获取不到,也就是用 document.cookie 根本读取不到,一开始怀疑是path /domain的问题,但是设置后没有任何作用,设置cookie一共有下面的几个参数
ctx.cookies.set(name, value, [options])

设置 cookie 中名为 name 的值,options 为可选参数:

signed: 是否要做签名
expires: cookie 有效期时间
path: cookie 的路径,默认为 /'
domain: cookie 的域
secure: false 表示 cookie 通过 HTTP 协议发送,true 表示 cookie 通过 HTTPS 发送。
httpOnly: true 表示 cookie 只能通过 HTTP 协议发送
    经过不断测试,终于发现是最后一个参数 httpOnly 的问题,它的默认值是true,要设置成false才可以,也就是说正确的方法是这样的
this.cookies.set('name', 'tobi',{httpOnly:false});

    一切都看到了光明!!!

    那么为什么会这样?httpOnly为什么会有这么大的影响力呢?说白了还是http协议了解不够多。

    经过一番搜索,原来是处于安全考虑,如果httpOnly为true则可以避免cookie被js读取,不法手段比如xss攻击来读取用户信息,造成严重后果,所以httpOnly为的就是表示只能通过http协议来获取cookie,不过话说回来,黑客如果通过js获取cookie来破解用户登陆感觉有点low了...

    附上一篇文章链接 http://blog.csdn.net/zzzmmmkkk/article/details/10862949 ,这里面关于httpOnly说得比较详细,大家可以看看。


你可能感兴趣的:(nodejs,cookie,无法读取,koajs)