首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用net/http设置cookies

使用net/http设置cookies
EN

Stack Overflow用户
提问于 2012-08-26 21:38:35
回答 7查看 97.2K关注 0票数 77

我正在尝试用Go的net/http包设置cookie。我有:

代码语言:javascript
复制
package main

import "io"
import "net/http"
import "time"

func indexHandler(w http.ResponseWriter, req *http.Request) {
    expire := time.Now().AddDate(0, 0, 1)
    cookie := http.Cookie{"test", "tcookie", "/", "www.domain.com", expire, expire.Format(time.UnixDate), 86400, true, true, "test=tcookie", []string{"test=tcookie"}}
    req.AddCookie(&cookie)
    io.WriteString(w, "Hello world!")
}

func main() {
    http.HandleFunc("/", indexHandler)
    http.ListenAndServe(":80", nil)
}

我试着用“cookies”搜索“Golang”,但没有得到任何好的结果。如果有人能为我指明正确的方向,我将不胜感激。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2012-08-26 21:44:05

我不是围棋专家,但我认为你是在设置请求的cookie,不是吗?您可能想要在响应中设置它。net/http中有一个setCookie函数。这可能会有帮助:http://golang.org/pkg/net/http/#SetCookie

代码语言:javascript
复制
func SetCookie(w ResponseWriter, cookie *Cookie)
票数 98
EN

Stack Overflow用户

发布于 2016-02-09 00:45:31

代码语言:javascript
复制
//ShowAllTasksFunc is used to handle the "/" URL which is the default ons
func ShowAllTasksFunc(w http.ResponseWriter, r *http.Request){
    if r.Method == "GET" {
        context := db.GetTasks("pending") //true when you want non deleted notes
        if message != "" {
            context.Message = message
        }
        context.CSRFToken = "abcd"
        message = ""
        expiration := time.Now().Add(365 * 24 * time.Hour)
        cookie    :=    http.Cookie{Name: "csrftoken",Value:"abcd",Expires:expiration}
        http.SetCookie(w, &cookie)
        homeTemplate.Execute(w, context)
    } else {
        message = "Method not allowed"
        http.Redirect(w, r, "/", http.StatusFound)
    }
}

RequestsResponseWriter之间有一个基本的区别,请求是浏览器发送的内容

代码语言:javascript
复制
Host: 127.0.0.1:8081
User-Agent: ...
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
DNT: 1
Referer: http://127.0.0.1:8081/
Cookie: csrftoken=abcd
Connection: keep-alive

响应是处理程序将发送的内容,如下所示:

代码语言:javascript
复制
Content-Type: text/html; charset=utf-8
Date: Tue, 12 Jan 2016 16:43:53 GMT
Set-Cookie: csrftoken=abcd; Expires=Wed, 11 Jan 2017 16:43:53 GMT
Transfer-Encoding: chunked
<html>...</html>

当浏览器发出请求时,它将包括该域的cookie,因为cookie是以域为单位存储的,不能从跨域访问,如果您将cookie设置为仅HTTP,那么它只能通过HTTP而不是JS从设置它的网站访问。

因此,在从cookies获取信息时,可以从r.Cookie方法获取信息,如下所示

代码语言:javascript
复制
cookie, _ := r.Cookie("csrftoken")
if formToken == cookie.Value {

https://github.com/thewhitetulip/Tasks/blob/master/views/addViews.go#L72-L75

但是,当您要设置cookie时,您必须在响应编写器方法中执行此操作,请求是我们响应的只读对象,可以将其视为您从某人那里收到的文本消息,这是一个请求,您只能获取它,您键入的是响应,因此您可以在

有关更多细节,请访问:https://thewhitetulip.gitbooks.io/webapp-with-golang-anti-textbook/content/content/2.4workingwithform.html

票数 15
EN

Stack Overflow用户

发布于 2016-02-08 18:18:22

下面的代码可以帮助您

代码语言:javascript
复制
    cookie1 := &http.Cookie{Name: "sample", Value: "sample", HttpOnly: false}
    http.SetCookie(w, cookie1)
票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12130582

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档