Is there a setting in golang server that force cookie to be auto attach from the browser if ajax request's domain and path matches cookie domain and path?

xuanbao · 2018-01-31 09:30:02 · 590 次点击    
这是一个分享于 2018-01-31 09:30:02 的资源,其中的信息可能已经有所发展或是发生改变。

I am trying to test if I am in domain A, can domain A client send domain B cookie to domain B.

Here is my golang code

package main

import (
    "fmt"
    "net/http"
    "log"
    "time"
    "encoding/json"
)

func setCookie(w http.ResponseWriter, r *http.Request) {
    expiration := time.Now().Add(365 * 24 * time.Hour)
    cookie := http.Cookie{Path: "/test_receive_cookie", Name: "test_cors", Value: "test_cors", Expires: expiration}
    http.SetCookie(w, &cookie)
    fmt.Fprintf(w, "Success")
}

func receiveCookie(w http.ResponseWriter, r *http.Request) {
    fmt.Println(r.Cookies())
    w.Header().Set("Access-Control-Allow-Origin", "*")

    data := make(map[string]interface{})
    for _, cookie := range r.Cookies() {
        data[cookie.Name] = cookie.Value
    }
    w.Header().Set("Content-Type", "application/json")
    json.NewEncoder(w).Encode(data)
}

func main() {
    http.HandleFunc("/set_cookie", setCookie)
    http.HandleFunc("/test_receive_cookie", receiveCookie)
    err := http.ListenAndServe(":8012", nil)
    if err != nil {
        log.Fatal("ListenAndServe: ", err)
    }
}

I first hit http://localhost:8012/set_cookie , then I open a html file containing a javascript using this library

        this._xhr.get(
            "http://localhost:8012/test_receive_cookie", 
            function(err, resp) {
                console.log(resp);
                console.log(err);
            });

Here is result of fmt.Println(r)

 &{GET /test_receive_cookie HTTP/1.1 1 1 map[Accept:[*/*] Accept-Encoding:[gzip, deflate, br] Accept-Language:[en-US,en;q=0.9] User-Agent:[Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36] Connection:[keep-alive] Pragma:[no-cache] Cache-Control:[no-cache] Origin:[null]] {} <nil> 0 [] false localhost:8012 map[] map[] <nil> map[] [::1]:61817 /test_receive_cookie <nil> <nil> <nil> 0xc420014600}

The following happened

  1. My server print [] from fmt.Println(r.Cookies())

  2. If I hit http://localhost:8012/test_receive_cookie I can see the cookie I set gets print out on browser, but when I open a html that calls the endpoint the server will have empty cookie

My questions is how can I pass the cookie set by http://localhost:8012/test_receive_cookie back to http://localhost:8012/test_receive_cookie using client code?

Am I missing some configuration code?


入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

590 次点击  
加入收藏 微博
0 回复
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传