最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Go語言Cookie用法分析

 更新時間:2017年02月18日 12:36:16   作者:52php  
這篇文章主要介紹了Go語言Cookie用法,結(jié)合實例形式分析了Go語言Cookie的設(shè)置、讀取等相關(guān)操作技巧,需要的朋友可以參考下

本文實例講述了Go語言Cookie用法。分享給大家供大家參考,具體如下:

web 開發(fā)免不了要和 cookie 打交道。Go 的 http 庫也提供了 cookie 的相關(guān)操作。

復制代碼 代碼如下:
type Cookie struct {
  Name       string
  Value      string
  Path       string
  Domain     string
  Expires    time.Time
  RawExpires string
  MaxAge     int
  Secure     bool
  HttpOnly   bool
  Raw        string
  Unparsed   []string
}

Name 字段為 cookie 的名字,Value 是其值,剩下的 Path 和 Domain 則是 cookie 的存儲的范圍。Expires 是 cookie 的過期時間,如果不設(shè)置,那么這是一個 session 型的 cookie,即瀏覽器會話有用,一旦關(guān)閉瀏覽器,cookie 隨即會被刪除。

設(shè)置 Cookie

cookie 是 header 一項內(nèi)容,因此可以使用 reponse 的 Header 方法設(shè)置 cookie。

復制代碼 代碼如下:
func setCookieHandler(w http.ResponseWriter, r *http.Request) {
    c1 := http.Cookie{
        Name: "first_cookie",
        Value: "vanyar",
        HttpOnly: true,
    }
    c2 := http.Cookie{
        Name: "second_cookie",
        Value: "noldor",
        HttpOnly:true,
    }
    w.Header().Set("Set-Cookie", c1.String())
    w.Header().Add("Set-Cookie", c2.String())
}

這里也可以測試驗證 Set 和 Add 兩個方法的差別。當然,和文件上傳類似,Go 也提供了常用的工具函數(shù)。

復制代碼 代碼如下:
http.SetCookie(w, &c1)
http.SetCookie(w, &c2)

http 的 SetCookie 方法也可以設(shè)置 cookie,就不需要關(guān)系 Set 和 Add 的先后順序了,當然第二個參數(shù)是一個 Cookie 的指針對象。設(shè)置了 cookie,接下來就是需要讀 cookie。

讀取 Cookie

讀取 cookie 的方式也有很多,cookie 封裝在header中,當然可以通過 header 方法處理。

復制代碼 代碼如下:
func getCookieHandler(w http.ResponseWriter, r *http.Request) {
    h := r.Header["Cookie"]
    fmt.Fprintln(w, h)
}

不使用 Header 方法,也可以使用 Request 的方法:

復制代碼 代碼如下:
func getCookieHandler(w http.ResponseWriter, r *http.Request) {
    c1, err := r.Cookie("first_cookie")
    if err != nil{
        fmt.Fprintln(w, "Cannot get cookie")
    }
    cs := r.Cookies()
    fmt.Fprintln(w, c1)
    fmt.Fprintln(w, cs)
}

訪問的時候可以發(fā)現(xiàn),r.Cookie 返回了對于 key 的鍵值對,而 r.Cookies 則返回了所有 cookie 的 key 的鍵值對值。

Cookie 與 消息

cookie 的作用很多,通常記錄客戶端的一些信息,用來做用戶的登錄驗證?,F(xiàn)在我們需要使用 cookie 來做一個小特性---消息。通常 web 請求發(fā)出后,response 返回數(shù)據(jù),也可以設(shè)置一些消息用來指引用戶。

復制代碼 代碼如下:
func setMessageHandler(w http.ResponseWriter, r *http.Request) {
    msg := []byte("Hello World")
    c := http.Cookie{
        Name: "flash",
        Value:base64.URLEncoding.EncodeToString(msg),
    }
    http.SetCookie(w, &c)
}
func getMessageHandler(w http.ResponseWriter, r *http.Request) {
    c, err := r.Cookie("flash")
    if err != nil {
        if err == http.ErrNoCookie {
            fmt.Fprintln(w, "No message found")
        }
    } else {
        rc := http.Cookie{
            Name: "flash",
            MaxAge: -1,
            Expires:time.Unix(1, 0),
        }
        http.SetCookie(w, &rc)
        val, _ := base64.URLEncoding.DecodeString(c.Value)
        fmt.Fprintln(w, string(val))
    }
}

setMessageHandler 函數(shù)很簡單,就是創(chuàng)建一個 cookie 實例,然后把消息寫入到 cookie,然后再返回給客戶端。

getMessageHandler 首先會讀取 key 為 flash 的 cookie,如果沒讀到內(nèi)容,則表示消息不存在,否則就創(chuàng)建另外一個 cookie,設(shè)置其過期時間這里等于清除 cookie。然后把讀取出來的 message 返回給客戶端。完成消息通信。

總結(jié)

我們討論了 Go 中 cookie 的基本應用?,F(xiàn)在的 web 開發(fā)中,人們越來越重視網(wǎng)絡安全,因此 cookie 的安全也成為用戶關(guān)心的內(nèi)容。Go 原生的 cookie 封裝比較簡單。Go 的社區(qū)卻開發(fā)了很多輪子,實現(xiàn)了secure cookie,例如 gorilla/securecookie 庫。實際開發(fā)中,可能會借助一些三方的庫或包來完成功能。

希望本文所述對大家Go語言程序設(shè)計有所幫助。

相關(guān)文章

  • Go語言中使用flag包對命令行進行參數(shù)解析的方法

    Go語言中使用flag包對命令行進行參數(shù)解析的方法

    這篇文章主要介紹了Go語言中使用flag包對命令行進行參數(shù)解析的方法,文中舉了一個實現(xiàn)flag.Value接口來自定義flag的例子,需要的朋友可以參考下
    2016-04-04
  • Go語言中節(jié)省內(nèi)存技巧方法示例

    Go語言中節(jié)省內(nèi)存技巧方法示例

    這篇文章主要為大家介紹了Go語言中節(jié)省內(nèi)存技巧方法示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-01-01
  • 在Gin框架中解決跨域問題的多種方法

    在Gin框架中解決跨域問題的多種方法

    在使用Go語言進行Web開發(fā)時,Gin框架因其簡潔、高效的特點而被廣泛使用,然而,在實際開發(fā)中,跨域問題(CORS, Cross-Origin Resource Sharing)是一個常見的挑戰(zhàn),本文將結(jié)合實際案例,詳細介紹在Gin框架中解決跨域問題的多種方法,需要的朋友可以參考下
    2024-10-10
  • GoLang?channel底層代碼分析詳解

    GoLang?channel底層代碼分析詳解

    Channel和goroutine的結(jié)合是Go并發(fā)編程的大殺器。而Channel的實際應用也經(jīng)常讓人眼前一亮,通過與select,cancel,timer等結(jié)合,它能實現(xiàn)各種各樣的功能。接下來,我們就要梳理一下GoLang?channel底層代碼實現(xiàn)
    2022-10-10
  • GO語言支付寶沙箱對接的實現(xiàn)

    GO語言支付寶沙箱對接的實現(xiàn)

    本文介紹了如何使用GO語言對接支付寶沙箱環(huán)境,包括秘鑰生成、SDK安裝和代碼實現(xiàn)等步驟,詳細內(nèi)容涵蓋了從秘鑰生成到前端代碼的每個階段,為開發(fā)者提供了一條清晰的指引
    2024-09-09
  • 完美解決go Fscanf 在讀取文件時出現(xiàn)的問題

    完美解決go Fscanf 在讀取文件時出現(xiàn)的問題

    這篇文章主要介紹了完美解決go Fscanf 在讀取文件時出現(xiàn)的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • 一文帶你掌握Go語言并發(fā)模式中的Context的上下文管理

    一文帶你掌握Go語言并發(fā)模式中的Context的上下文管理

    在?Go?的日常開發(fā)中,Context?上下文對象無處不在,無論是處理網(wǎng)絡請求、數(shù)據(jù)庫操作還是調(diào)用?RPC?等場景,那你真的熟悉它的正確用法嗎,隨著本文一探究竟吧
    2023-05-05
  • 詳解Golang time包中的time.Duration類型

    詳解Golang time包中的time.Duration類型

    在日常開發(fā)過程中,會頻繁遇到對時間進行操作的場景,使用 Golang 中的 time 包可以很方便地實現(xiàn)對時間的相關(guān)操作,本文講解一下 time 包中的 time.Duration 類型,需要的朋友可以參考下
    2023-07-07
  • 解析Go的Waitgroup和鎖的問題

    解析Go的Waitgroup和鎖的問題

    大家在學習go語言的時候,都知道go語言支持并發(fā),使用 goroutine,使用關(guān)鍵字 go 即可,接下來通過本文給大家分享Go的Waitgroup和鎖的問題,需要的朋友可以參考下
    2021-05-05
  • 更換GORM默認SQLite驅(qū)動出現(xiàn)的問題解決分析

    更換GORM默認SQLite驅(qū)動出現(xiàn)的問題解決分析

    這篇文章主要為大家介紹了更換GORM默認SQLite驅(qū)動出現(xiàn)的問題解決分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2024-01-01

最新評論

邹平县| 建始县| 延庆县| 湟源县| 西平县| 日喀则市| 安义县| 石渠县| 瑞安市| 宾阳县| 景德镇市| 宜宾县| 武安市| 临西县| 克山县| 分宜县| 花垣县| 通海县| 张家口市| 新巴尔虎左旗| 关岭| 农安县| 江西省| 阿拉善盟| 太谷县| 哈巴河县| 石景山区| 吉木萨尔县| 海城市| 玉屏| 临澧县| 台州市| 文水县| 志丹县| 广东省| 乌拉特后旗| 怀柔区| 叙永县| 新巴尔虎右旗| 天津市| 当阳市|