- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我正在使用 Go session 管理:
"github.com/gorilla/sessions"
以下代码的问题在于,与 CookieStore 关联的 session 未在处理程序之间共享,我需要它这样做。
处理程序 "/authorize"
将值保存到 session 中,然后重定向到另一个处理程序 "/thankyou"
,但该处理程序在 session 中看不到该值.
我已验证 session 在原始处理程序 "/authorize"
中确实具有新值。
import (
"github.com/gorilla/sessions"
)
var (
cookieStore *sessions.CookieStore
storeGUID string
sessionGUID string
)
func init() {
storeGUID = "{random-string}"
sessionGUID = "{random-string}"
cookieStore = sessions.NewCookieStore([]byte(storeGUID))
}
mux.HandleFunc("/authorize", func(w http.ResponseWriter, r *http.Request) {
var sess *sessions.Session
sess, err := cookieStore.Get(r, sessionGUID)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
sess.Values["authMode"] = "Authorized"
if err := sess.Save(r, w); err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
// Redirect to "/thankyou"
authorizeURL := r.URL.String()
thankyouRedirectURL := strings.Replace(authorizeURL, "authorize", "thankyou", 1)
defer http.Redirect(w, r, thankyouRedirectURL, http.StatusFound)
}
mux.HandleFunc("/thankyou", func(w http.ResponseWriter, r *http.Request) {
var sess *sessions.Session
sess, err := cookieStore.Get(r, sessionGUID)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
var sval interface{}
var authMode string
sval = sess.Values["authMode"]
if authMode, ok := sval.(string); !ok {
err := errors.New("Missing \"authSess\" in session.")
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
}
最佳答案
我的网络服务器遇到了同样的问题。我正在做你在这里做的事情:
sval = sess.Values["authMode"]
if authMode, ok := sval.(string); !ok {
err := errors.New("Missing \"authSess\" in session.")
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
我创建了一个局部变量以存储检索到的 session 值,然后键入断言该值以确保其完整性。我发现类型断言悄无声息地失败了,因为 gorilla/sessions.Session 结构的 Values 字段是类型 map[interface{}]interface{}
( source )。从 Values 字段中检索 session 值时,就像您在此处所做的那样...
sval = sess.Values["authMode"]
...编译器认为 sval 现在是 interface{}
类型。因此,当您尝试键入 assert sval 时,它无法将接口(interface)转换为字符串。
我所做的是在我处理类型断言的 if block 上方创建一个变量声明,以便我以后可以使用它。然后,我使用 map 元素本身键入断言。这就是您的样子:
var authMode string // a var declaration with the type you want
var ok bool // in my case, I also created a bool var to avoid a pointer error
// directly type assert the session value
if authMode, ok = sess.Values["authMode"].(string); !ok {
err := errors.New("Missing \"authSess\" in session.")
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
希望对您有所帮助!
关于session - gorilla / session : Session be managed (persist changes) between handlers?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45765891/
编辑:为了澄清,我想问的是:在什么情况下您会更喜欢一种语法而不是另一种语法? 有什么区别: .trigger('change') 和 .change() 两者都按预期工作。在任何情况下语法都会有所不同
这个问题在这里已经有了答案: Difference between .on('click') vs .click() (12 个答案) 关闭 6 年前。 有什么区别: $('选择器').change
我用的是Select2-4.0.0 和 $gameSelect.select2().on("change",function(e){....} 工作正常。 但是当我将它链接起来时('change')就
有一天在#haskell 上,有人提到了当字符串改变时字符串的类型应该如何改变的概念。这让我想起了我项目中的一些代码。它一直困扰着我,我说不清为什么。我现在推测,原因是我没有实现这个概念。这是下面的代
我使用了 .on("change") 事件函数,因为我的整个代码中有一部分是动态变化的。 .trigger("change") 在 .change() 中工作正常,但在 .on("change") 中
下面是一个非常简单的表单下拉列表设置。但是,on-change 事件拒绝触发...除非它更改为 ng-change。 这让我卡住了大约一个小时,因为我们在网站的其他地方使用了相同的设置(即模型属性/列
我有两个v-model 案例一: 这很好用 案例二: 即使改变 u1 也会触发 onDateChange(); 最佳答案 :change 绑定(bind)属性,如 v-bind:change=
我找到了 .and方法对于链接许多期望非常有用。 expect { click_button 'Update Boilerplate' @boilerplate_original.reload
出于合规性原因,我需要捕获所有数据库更改。我知道 Change Feed 存储此信息(并且我正在等待完全保真度来捕获删除)。目前,我一直在通过 Function 触发器读取 Change Feed 并
我添加了一个data-ng-change='getSubjectsClasswise(classBean.class_id);'上课标签,但主题未在主题 处加载标签。 一切看起来都很好,没有遇到问题
我有一组复选框,当您单击其中一个时,它们应该全部被选中。 当用户单击一个复选框时,它会检查以该类名称开头的所有其他复选框。我想要的是用户单击一个复选框,并且每次单击仅触发一次 $(".atpSelec
我在 Stack Overflow 上阅读了很多有关此问题的内容,并应用了所有建议的解决方案(getShell pack、布局、getparent 布局等...),但没有一个起作用。 我有一个带有文本
我想更改我的索引。我的数据框如下: partA = pd.DataFrame({'u1': 2, 'u2': 3, 'u3':4, 'u4':29, 'u5':4, 'u6':1, 'u7':323,
我有一个像这样的下拉菜单: Grade Year 旁边还有另一个下拉菜单: 3 4
这个问题已经有人问过,但我只停留在最基本的层面上。除了选择标记和尝试通过 jquery 捕获更改事件外,我没有向我的 html 添加任何内容。这是我的代码: $('#target').bin
我只是 Django 的新手几天。现在,当自定义表单中其他字段的值发生变化时,我需要同时更改一个字段中的值和表示形式。此时更改 MyModel 是受限。 我的应用程序/models.py: class
我正在使用 ListView 控件来显示一些数据行。有一个后台任务接收列表内容的外部更新。新收到的数据可能包含更少、更多或相同数量的项目,而且项目本身可能已更改。 ListView.ItemsSour
我在 android studio 中使用 git 插件。我的问题是当我提交更改列表(公开提交)时,但我在更改列表中的评论是错误的/丢失的,我想更改它。 问题: 有没有办法通过 AndroidStud
MyCustomObject * object=new MyCustomObject(); 假设我的许多类都使用了对象指针,但突然间我想在不更改地址的情况下更改指针的内容。 我认为 object =
我正在使用新的 KeyValue Observing。当变量发生变化时,我接到了我的观察者的电话,但 change struct 附带 newValue和 oldValue都为 nil ,所以它永远不
我是一名优秀的程序员,十分优秀!