iT邦幫忙

2021 iThome 鐵人賽

DAY 15
0
自我挑戰組

go go let's go - golang 從0開始系列 第 15

Golang 轉生到web世界 - Cookie與session

  • 分享至 

  • xImage
  •  

Cookie與session是web開發常需要使用的玩意

先來個cookie的範例程式

package main 

import ( 
    "fmt" 
    "net/http" 
) 

func setCookie(w http.ResponseWriter, r *http.Request) { 
    c := http.Cookie{ 
        Name:     "username", 
        Value:    "Tom", 
        HttpOnly: true, 
    } 

    http.SetCookie(w, &c) 
} 

 

func getCookie(w http.ResponseWriter, r *http.Request) { 

    c, err := r.Cookie("username") 
    if err != nil { 
        fmt.Fprintln(w, "Cannot get cookie") 
    } 
    fmt.Fprintln(w, c) 
} 

func indexHandler(w http.ResponseWriter, r *http.Request) { 
    fmt.Fprintf(w, "hello world") 
} 

 

func main() { 
    http.HandleFunc("/", indexHandler) 
    http.HandleFunc("/cookie/set", setCookie) 
    http.HandleFunc("/cookie/get", getCookie) 
    http.ListenAndServe("localhost:8000", nil) 
} 

範例中大致設定該cookie的name,所對應的value,以及設定HttpOnly,其實最好還是要設定其存活時間也會比較好

能設定的參數如下

type Cookie struct { 

Name  string 

Value string 

Path       string    // optional 

Domain     string    // optional 

Expires    time.Time // optional 

RawExpires string    // for reading cookies only 

// MaxAge=0 means no 'Max-Age' attribute specified. 

// MaxAge<0 means delete cookie now, equivalently 'Max-Age: 0' 

// MaxAge>0 means Max-Age attribute present and given in seconds 

MaxAge   int 

Secure   bool 

HttpOnly bool 

SameSite SameSite 

Raw      string 

Unparsed []string // Raw text of unparsed attribute-value pairs 

} 

Name/Value: Cookie的名稱和值

Path: 可以將Cookie限定在某個路徑下,只有這個路徑和它的子路徑才可以訪問。

Domain: 只關聯的web伺服器的Domain, 比如example.com。如果你設置的Cookie的domain為a.example.com,那麼訪問b.example.com的時候是不能訪問這個Cookie的。

Expires: 為Cookie過期時間,Cookie超過這個時間點就會被刪除了。

RawExpires: Expires字串表示, 格式為Wdy, DD Mon YYYY HH:MM:SS或者Wdy, DD Mon YY HH:MM:SS

MaxAge: 最大存活時間。

Secure:設置 Cookie 只在HTTPS的請求中才會作用。

HttpOnly:跟安全性有關,建議true。

SameSite: 跟Chrome有關,主要是在處理跨域的安全問題。

備註:

這邊要特別注意ListenAndServe的位置,如果在HandleFunc之前的話,會導致該路由吃不到唷,所以如果範例跑失敗的話,建議注意一下這個部分

HttpOnly

這個部分是建議使用true,當 cookie 有設定 HttpOnly tue時,瀏覽器會限制 cookie 只能經由 HTTP(S) 協定來存取。因此當網站被 XSS 攻擊時,我們有把 cookie HttpOnly設定為true,這樣一來xss就無法直接透過 JavaScript 來盜取 cookie。

Session本來想一起拚完的,但真的累了~改天吧!!!!!


上一篇
Golang 轉生到web世界 - 表單
下一篇
Golang 轉生到web世界 - 檔案操作
系列文
go go let's go - golang 從0開始30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言