Asp.net Core 2.0 实现Cookie会话

与1.0版本相比微软做了一些调整。详细请参考官方文档,我这里就讲2.0的吧

1.首先要在 根目录下 Startup.cs 类中启用 cookie会话,有两处要配置

第一处在  public void Configure(IApplicationBuilder app, IHostingEnvironment env) 方法里

 设置  app.UseAuthentication();

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
  if (env.IsDevelopment())
  {
     app.UseDeveloperExceptionPage();
  }
  else
  {
     app.UseExceptionHandler("/Home/Error");
  }
     //启用资源文件访问
     app.UseStaticFiles();
     //启用cookie会话
     app.UseAuthentication();
     app.UseMvc(routes =>
     {
        routes.MapRoute(
        name: "default",
        template: "{controller=Home}/{action=Index}/{id?}");
     });
}

第二处 在public void ConfigureServices(IServiceCollection services) 方法里

“你的cookie名称”--一定要一致。

public void ConfigureServices(IServiceCollection services)
{
   services.AddMvc();
   //services.Configure<IISOptions>(option=>{
   // option.AuthenticationDisplayName="";
    //});
   services.AddCoreServices();
   //设置cookie信息
   services.AddAuthentication("你的cookie名称").AddCookie("你的cookie名称",Options=>{
   Options.LoginPath="/WeChat/Login";//设置登录页,还有其他配置就不作介绍了
   });
}

 

2.登录

2.0的登录作了调整 需要引用 using Microsoft.AspNetCore.Authentication; 此命名空间

public IActionResult Login(LoginViewModel model,string returnUrl = null)
{
  //省略到数据库验证代码
  ............
  //设置声明,从数据库读取,设置角色之类,详情请科普 mvc的Identity声明认证
  var claims = new List<Claim>()
   {
   new Claim("userModel",JsonConvert.SerializeObject(model)),
  //new Claim("Role",model.RoleName),
   };
  var userPrincipal = new ClaimsPrincipal(new ClaimsIdentity(claims, "声明的名称"));
   //登陆
   awiat HttpContext.SignInAsync("你的cookie名称", userPrincipal,new        AuthenticationProperties
   {
   ExpiresUtc = DateTime.UtcNow.AddMinutes(900)//过期时间
   });
  if(returnUrl==null)
  {  
    //重定向到首页
    return RedirectToAction("Index", "Home");
  }
  //重定向到初始请求页
  return Redirect(returnUrl);
}

  

3.退出

/// <summary>
/// 退出
/// </summary>
public IActionResult Logout()
{
  await HttpContext.SignOutAsync("你的cookie名称");
  //重定向到登录页
    return RedirectToAction("Login", "Account");
} 

 

好了,说完了。。。

 

posted @ 2017-09-26 16:42  lzj007  阅读(324)  评论(1)    收藏  举报