首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法为golang的fasthttp框架设置cookie

无法为golang的fasthttp框架设置cookie
EN

Stack Overflow用户
提问于 2018-11-26 10:46:45
回答 2查看 2.5K关注 0票数 1

我试图使用fasthttp框架从服务器上设置cookie。但是,cookie值在响应头中没有正确设置。我不知道我在下面的片段中遗漏了什么。

代码语言:javascript
复制
package main

import (
    "log"

    "github.com/valyala/fasthttp"
)

func main() {
    if err := fasthttp.ListenAndServe(":8080", requestHandler); err != nil {
        log.Fatalf("Error in ListenAndServe: %s", err)
    }
}

func requestHandler(ctx *fasthttp.RequestCtx) {
    switch string(ctx.Path()) {
    case "/foo":
        cook1 := fasthttp.Cookie{}
        cook1.SetKey("cookie_key")
        cook1.SetValue("cookie val")
        cook1.SetMaxAge(3600000)
        cook1.SetDomain("prabhakaran.com")
        cook1.SetPath(("/"))
        cook1.SetSecure(true)
        ctx.Response.Header.Cookie(&cook1)
        ctx.SetBody([]byte("this is completely new body contents"))

    case "/bar":
        //todo: Bar handler
        // ctx.SetBody([]byte("111111111111111111111"))
    default:
        ctx.Error("Unsupported path", fasthttp.StatusNotFound)
    }
}

我也尝试过ctx.Response.Header.SetCookie(&cook1) API。但这行不通。有什么东西遗漏了片段吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-11-27 07:30:37

代码语言:javascript
复制
ctx.Response.Header.Cookie(&cook1)

Cookie函数用于查看cookie值。所以,使用SetCookie函数代替Cookie。如果您正在http协议中运行服务器,请删除cook1.SetSecure(true)语句。

票数 1
EN

Stack Overflow用户

发布于 2019-08-31 17:04:57

这里是一个cookie检索的例子。

代码语言:javascript
复制
// ParseTokenFromRequest is delegated to retrieved the token encoded in the request. The token can be sent in two different way.
// In first instance the method will try to find the token in the cookie. If the cookie is not provided in the cookie,
// then the research will continue analayzing the body of the request (URL ARGS,GET,POST).
// In case of token not found, an empty string will be returned
func ParseTokenFromRequest(ctx *fasthttp.RequestCtx) string {
    token := string(ctx.Request.Header.Cookie("GoLog-Token")) // GoLog-Token is the hardcoded name of the cookie
    log.Info("ParseTokenFromRequest | Checking if token is in the cookie ...")
    if strings.Compare(token, "") == 0 { // No cookie provided :/ Checking in the request
        log.Warn("ParseTokenFromRequest | Token is not in the cookie, retrieving from the request ...")
        token = string(ctx.FormValue("token")) // Extracting the token from the request (ARGS,GET,POST)
        if strings.Compare(token, "") == 0 {   // No token provided in the request
            log.Warn("ParseTokenFromRequest | Can not find the token! ...")
            return "" // "COOKIE_NOT_PRESENT"
        }
        log.Info("ParseTokenFromRequest | Token found in request! ... | ", token)
    } else {
        log.Info("ParseTokenFromRequest | Token found in cookie! ... | ", token)
    }
    return token
}

这里是一个曲奇集的例子。

代码语言:javascript
复制
//CreateCookie Method that return a cookie valorized as input (GoLog-Token as key)
func CreateCookie(key string, value string, expire int) *fasthttp.Cookie {
    if strings.Compare(key, "") == 0 {
        key = "GoLog-Token"
    }
    log.Debug("CreateCookie | Creating Cookie | Key: ", key, " | Val: ", value)
    authCookie := fasthttp.Cookie{}
    authCookie.SetKey(key)
    authCookie.SetValue(value)
    authCookie.SetMaxAge(expire)
    authCookie.SetHTTPOnly(true)
    authCookie.SetSameSite(fasthttp.CookieSameSiteLaxMode)
    return &authCookie
}
authcookie := CreateCookie('','TEST_VALUE',120)
ctx.Response.Header.SetCookie(authcookie)     // Set the token into the cookie headers
ctx.Response.Header.Set("GoLog-Token", token) // Set the token into a custom headers

这里是一个cookie的例子-删除

代码语言:javascript
复制
ctx.Response.Header.DelCookie("GoLog-Token")
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53479453

复制
相关文章

相似问题

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