Как получить cookie и сеанс вне контроллера в beego

Я хочу получить и установить cookie в моем служебном файле, но код "ctx.SetCookie ()" всегда выдает ошибку "недопустимый адрес памяти или разыменование нулевого указателя", пожалуйста, помогите мне, заранее спасибо

Я пробовал два метода решения этой проблемы, но с этим все еще что-то не так

способ 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")
}

паника: ошибка времени выполнения: недопустимый адрес памяти или разыменование нулевого указателя [сигнал SIGSEGV: код нарушения сегментации = 0x1 адрес = 0x10 pc = 0x832639]


person Hugo.Huang    schedule 23.09.2019    source источник
comment
Для установки и получения файлов cookie требуется контекст контроллера.   -  person Cerise Limón    schedule 23.09.2019


Ответы (2)


Установить cookie можно с помощью .SetCookie() метода объекта контекста beego. Сам объект контекста доступен через любой контроллер, в который встроен 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)
}
person novalagung    schedule 23.09.2019
comment
Спасибо большое! но я хочу установить cookie вне контроллера, есть ли у вас другие рекомендуемые методы - person Hugo.Huang; 23.09.2019
comment
@ Hugo.Huang вам нужно передать объект контекста в модель. см. обновленный ответ - person novalagung; 23.09.2019
comment
Как использовать функцию SetCookieFromHere вне контроллера? Я получаю сообщение об ошибке недопустимый адрес памяти или разыменование нулевого указателя, когда использую его в своем служебном или служебном файле. - person Hugo.Huang; 23.09.2019

Вы можете установить через фильтр beego.

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

beego.InsertFilter("/*", beego.BeforeRouter, SetCookie)
person ahmetlutfu    schedule 04.01.2020