首先,让我先说一下参加夺旗比赛,我对Go Gorilla Sessions的问题有些困难。我从来没有在Go中编码,所以这很有趣,令人沮丧:)
我有一把密钥。我有一个编码的Cookie。我需要使用我拥有的密钥对cookie进行解码,编辑其中的任何数据,然后使用我更改的数据重新加密以进行挑战。
我已经阅读过Gorilla Sessions Package文档而没有得到任何帮助。
任何人都可以提供帮助,我从哪里开始?
答案 0 :(得分:2)
查看文档 - 大猩猩提供secure cookie package。 根据您的应用程序架构 - 基本实现可以如下工作:
创建供您的应用使用的会话管理包。为了举例,我们称之为sessionmngr
在"github.com/gorilla/securecookie"
内,导入sessionmngr
。
在init()
包中,使用小写securecookie
函数设置http.Request
的私有实例。导入包后,将按声明的顺序调用小写的init()函数。 (查看语言spec以获取更多信息)。您将使用此实例对标准库import (
"github.com/gorilla/securecookie"
//you will need this later
"http"
)
//declare private secure cookie
var s *securecookie.SecureCookie
//initialize it here (taken from the gorilla docs example)
func init() {
var hashKey = []byte("very-secret")
var blockKey = []byte("a-lot-secret")
s = securecookie.New(hashKey, blockKey)
}
中的cookie进行编码和解码。
s
然后,您将在整个软件包中使用Decode
来处理需要对cookie的值进行编码和解码的函数。 securecookie package documentation提供了样板示例。
要满足阅读和修改已加密Cookie的要求,请使用上面示例中设置的Encode
实例上的securecookie
和func DecodeAndModify(w http.ResponseWriter, r *http.Request) {
//get reference to cookie if set
if cookie, err := r.Cookie("cookie-name"); err == nil {
value := make(map[string]string)
//use Decode to get the value from the cookie
if err = s.Decode("cookie-name", cookie.Value, &value); err == nil {
//modify the value in some way
value["newKey"] = "newValue"
//re-encode it
if encoded, err := s.Encode("cookie-name", value); err == nil {
cookie := &http.Cookie{
Name: "cookie-name",
Value: encoded,
Path: "/",
}
http.SetCookie(w, cookie)
}
}
}
}
方法。
类似的东西---
let moveAction = SCNAction.move(to: location, duration: 1.5)
moveAction.timingMode = .easeInEaseOut