chdyiboke / weekly

issue and share weekly
5 stars 1 forks source link

nodejs(koajs)设置中文cookie无效 #6

Open chdyiboke opened 4 years ago

chdyiboke commented 4 years ago

this.cookies.set('test', '我是koajs') ====》 http的header字符集支持US-ASCII子集的字符集,故设置中文是'utf8'时就会报上面错误。

解决方案??

把字符串转成base64即可 this.cookies.set('test', new Buffer('我是koajs').toString('base64')) 复制代码 base64转到字符串 new Buffer(str, 'base64').toString();//str是base64编码的字符串

https://juejin.im/post/6844903617451802638 https://nodejs.org/zh-cn/docs/guides/buffer-constructor-deprecation/

chdyiboke commented 4 years ago

Buffer() 和 new Buffer() 构造函数对于有安全顾虑的人而言是不推荐使用的。 请使用新的方法 Buffer.alloc(),Buffer.allocUnsafe() 或者是 Buffer.from() 构造函数。

chdyiboke commented 4 years ago

SyntaxError: Unexpected token i in JSON at position 0

旧的cookie格式不对,导致报错

兼容判断是否为base64,否则,重新登录,重置cookie。

liukexina commented 4 years ago

判断是否为base64格式的字符串 const exg = new RegExp('^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{4}|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)$'); exg.test();

liukexina commented 4 years ago

判断是否为base64格式的字符串 const exg = new RegExp('^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{4}|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)$'); exg.test();