google-app-engine - 如何在 golang gorilla 框架中设置 session 变量?

标签 google-app-engine session go session-cookies

我的以下代码

package inqzincrm

import (
    "github.com/gorilla/pat"
    "github.com/gorilla/sessions"
    "net/http"
)

var store = sessions.NewCookieStore([]byte("X12h8v6BZC4QJl53KfNLshtr85gkC5OZ"), []byte("X12h8vasdf6BZC4QJl53KfNLshtr85gk"))

func init() {

    r := pat.New()
    r.Get("/", Home)

    http.Handle("/", r)
}

在处理程序中,

package inqzincrm

import (
    "appengine"
    "html/template"
    "net/http"
)

var aTmplt = template.Must(template.ParseFiles(
    "inqzincrm/templates/base.html",
    "inqzincrm/templates/index.html",
))

func Home(w http.ResponseWriter, r *http.Request) {
    c := appengine.NewContext(r)

    session, err := store.Get(r, "x")

    c.Infof("HOST: %s", r.Host)

    if session.IsNew {
        session.Options.Domain = r.Host
        session.Options.Path = "/"
        session.Options.MaxAge = 0
        session.Options.HttpOnly = false
        session.Options.Secure = false
    }

    if err != nil {
        c.Infof("Error getting session: %v", err)
    }
    c.Infof("Requested URL: %v", session.Values["foo"])
    session.Values["foo"] = "asdf"
    if err := aTmplt.ExecuteTemplate(w, "index.html", nil); err != nil {
        http.Error(w, err.Error(), http.StatusInternalServerError)
    }
    session.Save(r, w)
}

不要在浏览器端设置任何cookie。 result 和 err 怎么都为 nil 表示函数没有问题。

我应该如何进一步调试?

我正在使用 Ubuntu 64 位、Google App Engine、Go with Gorilla 工具包。

最佳答案

看看我对上一个问题的回答here .

简而言之:

import (
    "github.com/gorilla/sessions"
    "net/http"
)

// Authorization Key
var authKey = []byte("somesecret")

// Encryption Key
var encKey = []byte("someothersecret")

var store = sessions.NewCookieStore(authKey, encKey)

func initSession(r *http.Request) *sessions.Session {
    session, _ := store.Get(r, "my_cookie") // Don't ignore the error in real code
    if session.IsNew { //Set some cookie options
        session.Options.Domain = "example.org"
        session.Options.MaxAge = 0
        session.Options.HttpOnly = false
        session.Options.Secure = true
    }
    return session
}

然后,在您的处理程序中:

func ViewPageHandler(w http.ResponseWriter, r *http.Request) {
    session := initSession(r)
    session.Values["page"] = "view"
    session.Save(r, w)
....

您的代码似乎 做同样的事情,所以如果没有更多示例,我看不出它有任何问题。我可以说我发布的示例(非常稍微修改过)来自工作服务器。

关于google-app-engine - 如何在 golang gorilla 框架中设置 session 变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17946157/

相关文章:

c# - 是否可以共享 SQL Server 数据库以在 Asp.Net Web 窗体中存储 session 状态

regex - 在 Golang 中从 HTML 中提取文本内容

go - 如何防止递归函数死锁?

google-app-engine - 如何按键选择单个实体(低级 Java 数据存储 API)

session - 当浏览器关闭时 Spring Security 不会终止 session

java - 谷歌Eclipse插件: App Engine ORM Enhancement?

c# - 静态 session 类和多用户

go - 流式命令输出进度

python - Google App Engine 中的用户模块错误

python - Google Cloud Platform - 数据存储 - Python ndb API