如何在beego中的控制器外部获取cookie和会话

时间:2019-09-23 01:24:00

标签: go cookies controller beego

我想在服务文件中获取并设置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]

2 个答案:

答案 0 :(得分:0)

设置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)
}

文档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)
}

答案 1 :(得分:0)

您可以通过beego过滤器进行设置。

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

beego.InsertFilter("/*", beego.BeforeRouter, SetCookie)