【问题标题】:How to use session variables in ASP.NET Core 3.1 MVC using C#如何使用 C# 在 ASP.NET Core 3.1 MVC 中使用会话变量
【发布时间】:2023-04-08 20:40:01
【问题描述】:

我在处理会话对象时遇到了问题。设置和进入同一个控制器可以正常工作,我的麻烦是使用保存在另一个控制器中的会话中的信息,它对我不起作用,每次我得到一个空值。我曾经编写 PHP 代码,我只需要启动会话并获取值。不知道如何在 ASP.NET Core 3.1 MVC 中做到这一点。

using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using partner2.Data;
using partner2.Helpers;
using partner2.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace partner2.Controllers
{
    public class UsuarioController : Controller
    {
        public IActionResult Index()
        {
            return View();
        }

        public IActionResult Create()
        {
            return View();
        }

        [HttpPost]
        [ValidateAntiForgeryToken]//antiataque
        public IActionResult Create(Usuario usuario)
        {
            Sql sql = new Sql();

            usuario.id_ativo = true;
            usuario.senha = GenerateMD5.CreateMD5(usuario.senha);
            sql.addUser(usuario);
            int userid = sql.getIdByCpf(usuario.cpf);
            HttpContext.Session.SetInt32("userid", userid);

            if (!sql.enderecoExists(usuario.cpf))
            {
                return View("CreateAdress");
            }

            return View();
        }

        public IActionResult CreateAdress(Endereco endereco)
        {
            Sql sql = new Sql();
            int? id = HttpContext.Session.GetInt32("userid");

            sql.addEndereco(endereco);

            return View();
        }
    }
}

【问题讨论】:

    标签: c# controller asp.net-core-mvc asp.net-core-3.1


    【解决方案1】:

    对于 ASP.NET Core,您需要确保在 Startup-Class 中添加了所有需要的配置。我怀疑你缺少内存缓存。

    public void ConfigureServices(IServiceCollection services)
        {
            ....
            ....
    
            services.AddDistributedMemoryCache(); // <- This service
    
            services.AddSession(options =>
            {
                options.IdleTimeout = TimeSpan.FromSeconds(10);
                options.Cookie.HttpOnly = true;
                options.Cookie.IsEssential = true;
            });
        }
    

    【讨论】:

      【解决方案2】:

      在我看来,您的 HttpContext.Session.SetInt32("userid", userid); 看起来不对。我认为你应该这样设置 HttpContext.Session.SetInt32("userid", usuario.id_) 因为除了您正在设置的那个之外,我没有看到另一个“用户 ID”。我可能是错的。你的sql.addUser(usuario); 也可能需要sql.SaveChanges(); 我也可能错了。 :) 希望我能帮上忙 :)

      【讨论】:

        猜你喜欢
        • 2013-12-19
        • 1970-01-01
        • 2020-06-15
        • 2022-01-09
        • 2015-07-27
        • 2017-06-09
        • 2020-06-16
        • 1970-01-01
        • 2014-12-15
        相关资源
        最近更新 更多