常用的go base64编码解码,有两个标准库
base64.StdEncoding
base64.URLEncoding
都有其对应的编码和解码,但是我们在使用cookie时,一般使用下面这个,但是gin的SetCookie源码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
// SetCookie adds a Set-Cookie header to the ResponseWriter's headers. // The provided cookie must have a valid Name. Invalid cookies may be // silently dropped. func (c *Context) SetCookie(name, value string, maxAge int, path, domain string, secure, httpOnly bool) { if path == "" { path = "/" } http.SetCookie(c.Writer, &http.Cookie{ Name: name, Value: url.QueryEscape(value), MaxAge: maxAge, Path: path, Domain: domain, SameSite: c.sameSite, Secure: secure, HttpOnly: httpOnly, }) } |
其对value做了QueryEscape,类似于php的urlencode,这也是为什么我们对接很多第三方的时候,使用base64编码出现问题的原因,需要先做一下urldecode,go里面是
1 |
value, _ = url.PathUnescape(value) |
解码前先做一下url解码
不然就有可能编码后有些特殊字符被转义,因为我们使用cookie时一般都是些明文、比较短的字符,一般可能没有遇到过这个问题
程序本天成,妙手偶得之!我们只是代码的搬运工!
转载请注明:http://www.521php.com/archives/2082/
2021年05月10日 下午 11:15 跨境电商卖家 | 引用 | #1
非常的不错、、、、、