2015-09-09 31 views
0

這裏沒有太多的上下文,因爲它確實是某種情況下應該工作,但它沒有。golang martini session.Set沒有設置任何值

我正在使用馬提尼框架。在我使用的一個處理程序中:

session.Set("deployed", "true") 
r.Redirect("/myOtherURL", http.StatusSeeOther) 

其中'session'是會話傳遞給處理程序的sessions.Session對象。 在加載myOtherURL的處理程序中,我使用了session.Get,但沒有任何內容被返回。我打印出所有會話內容,並且「部署」不存在。

什麼可能導致此問題?我可能錯過了什麼?如果可以的話,我會給出更多的上下文,但它確實如此簡單。

+1

你可以發佈更多的代碼:設置和獲取操作的完整處理程序,以及cookie存儲的設置代碼,包括您設置的任何選項(安全,HttpOnly)。 – elithrar

+0

@elithrar這很難,因爲我的功能很大。我注意到,當瀏覽URL中的路徑/模塊時,會產生第二個cookie /會話。我可以在谷歌瀏覽器上的開發工具上看到它。我猜這些單獨的會話是我的變量不共享的原因。你知道爲什麼它會產生第二次會議嗎?這聽說過嗎?對於這個/ modules路由,我不會做任何不同的處理/會話,它和其他的一樣,但是由於某些隨機的原因,它會創建一個新的會話。 – Conor

+1

您是否設置了Cookie的路徑?如果不是,則默認爲當前路徑 - 例如'/ modules'。如果其他路線處於同一水平或以上,則Cookie不適用。您需要將'session.Options.Path'設置爲覆蓋兩者的路徑 - 容易的選擇是將其設置爲'/'。 – elithrar

回答

1

只是爲了在將來對我的意見/幫助他人擴展:

  • 當您設置一個cookie沒有明確Path值,該cookie以當前路徑上。
  • 只發送該路徑和下面的路徑 - 不在上面的曲奇 - 例如

    1. /modules設置cookie時,您隱式的通過session.Set(val, key)
    2. 的Cookie設置首次派人/modules/modules/all/modules/detail/12
    3. 曲奇爲​​或/

這可以通過固定設置明確的路徑:

var store = sessions.NewCookieStore([]byte("secret123")) 

func main() { 
    store.Options.Path = "/" 
    ... 
} 

要知道,你可能不希望發送的所有路由一個cookie(這是什麼/都行) - 所以使用的判斷。