首页 > 解决方案 > 为什么会话在 Net Core 项目中不起作用?

问题描述

我正在尝试在我的项目中添加一个会话。我添加了所有定义和参考。当我设置会话时,会话有一个值。但在另一个动作中,会话似乎为空

我将此配置添加到 Startup.cs:

namespace LDI.Web
{
    public class Startup
    {
        public Startup(IConfiguration configuration)
        {
             Configuration = configuration;
        }

        public IConfiguration Configuration { get; }

        public void ConfigureServices(IServiceCollection services)
        {
            services.Configure<CookiePolicyOptions>(options =>
                     {
                          options.CheckConsentNeeded = context => true;
                          options.MinimumSameSitePolicy = SameSiteMode.None;
                     });
            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
            services.AddDistributedMemoryCache();
            services.AddSession(options => {
                          options.IdleTimeout = TimeSpan.FromMinutes(30);
                          options.Cookie.HttpOnly = true;
                          options.Cookie.IsEssential = true;
                     });
        }

        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseExceptionHandler("/Home/Error");
                app.UseHsts();
            }

            app.UseHttpsRedirection();
            app.UseStaticFiles();
            app.UseCookiePolicy();
            app.UseSession();

            app.UseMvc(routes =>
                {
                    routes.MapRoute(
                           name: "default",
                           template: "{controller=Home}/{action=Index}/{id?}");
                });
        }
    }
}

我正在使用 NetCore 2.1,并且我已经实现了Microsoft.AspNetCore.Session依赖项。

HomeController.cs

[HttpPost]
public IActionResult Login(User user)
{
    Context db = new Context();
    UserRepo repo = new UserRepo(db);

    Expression<Func<User,bool >> filter = x => x.Username==user.Username && x.Password==user.Password;
    User currentUser = repo.Get(filter);

    if (currentUser != null)
    {
        HttpContext.Session.SetInt32("UserID", currentUser.ID);
        int? id = HttpContext.Session.GetInt32("UserID");

        //id has value
        return RedirectToAction("Index");
    }

    return View();
}

public IActionResult Index()
{
    repo = new UserRepo(db);
    int? id = HttpContext.Session.GetInt32("UserID");
    //id has no value

    Expression<Func<User, bool>> filter = x => x.ID == id;
    User user = repo.Get(filter);
    ViewBag.User = user;

    return View();
}

在 Login Action 中,Id 有一个值,但在 Index Action 中 session 为 null 并且 id 没有值。

标签: c#asp.net-mvcsessionasp.net-core.net-core

解决方案


推荐阅读