我想在服务文件中获取并设置cookie,但是代码“ctx.SetCookie()”始终会收到错误消息“无效的内存地址或nil指针取消引用”,请帮助我,谢谢。

我尝试了两种方法来解决此问题,但仍然存在问题

方法1:

type security struct {
    beego.Controller
}
...
func (s security) CheckToken(){
    ...

    ctx.SetCookie("token","xxxxxxxx")
}

方法2:
import "github.com/astaxie/beego/context"

func (s security) CheckToken(){
    ...
    ctx := context.NewContext()
    ctx.SetCookie("token","xxxxxxxx")
}

紧急:运行时错误:无效的内存地址或nil指针取消引用
[信号SIGSEGV:细分违规代码= 0x1 addr = 0x10 pc = 0x832639]

最佳答案

设置cookie可以通过beego上下文对象的.SetCookie()方法完成。上下文对象本身可以通过嵌入beego.Controller的任何控制器进行访问。

func (c *MainController) SetToken() {
    c.Ctx.SetCookie("token", "xxxxxxxx")
}

func (c *MainController) GetToken() {
    cookieValue := c.Ctx.GetCookie("token")
    fmt.Println(cookieValue)
}

Doc https://beego.me/docs/module/context.md

更新#1

我想在控制器之外设置cookie

您需要做的是将控制器的上下文对象传递到特定的函数中。例如:
package models

import "github.com/astaxie/beego/context"

func SetCookieFromHere(ctx *context.Context) {
    ctx.SetCookie("token", "xxxxxxxx")
}

package controllers

import "yourpackage/models"

func (c *MainController) SetToken() {
    models.SetCookieFromHere(c.Ctx)
}

关于go - 如何在beego中的 Controller 外部获取cookie和 session ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58054667/

10-12 04:58