tnblog
首页

Net Core中使用cookie

280人阅读 2019/1/9 22:44 评论:7 收藏
分类: .NET Core

net core中可以使用传统的cookie也可以使用加密的cookie


NET CORE中使用传统cookie


设置:  

 HttpContext.Response.Cookies.Append("password","123456");

获取:

  string value = "";
  HttpContext.Request.Cookies.TryGetValue("password", out value);

 

传统的Cookie是用的明文传递的:


 NET CORE中使用加密cookie


1:使用nuget命令下载依赖            

    Install-PackageMicrosoft.AspNetCore.Authentication.Cookies             

    注:添加过后重新生成一下,不然没有提示,强制写出来也会提示报错


2:在startup.cs中注册   

     app.UseCookieAuthentication(new CookieAuthenticationOptions() {
 
                AuthenticationScheme="myuser", //名称
                AutomaticAuthenticate=true,//自动验证
                LoginPath= "/account/login"//登录地址
            });

3:创建验证登录方法(写入cookie)             

 public async Task<IActionResult> ExeLogin()
        {
 
            int userid = 1;
            string username = "xp";
 
            ClaimsIdentity identity = new ClaimsIdentity("Forms");
            identity.AddClaim(new Claim(ClaimTypes.Sid, userid.ToString()));
            identity.AddClaim(new Claim(ClaimTypes.Name, username));
            identity.AddClaim(new Claim("password", "123456"));//自己随便写一个名字
 
            var principal = new ClaimsPrincipal(identity);
            await HttpContext.Authentication.SignInAsync("myuser", principal, new AuthenticationProperties { IsPersistent = true });
 
            //登录后需要返回的页面
            //string returnUrl = Request.Query["returnUrl"];
            //if (!string.IsNullOrEmpty(returnUrl)) return Redirect(returnUrl);
 
            return RedirectToAction("index", "account");
        }


4:获取加密cookie的方法            

 [Authorize(ActiveAuthenticationSchemes = "myuser")]
        public IActionResult Index()
        {
            //用户用户信息
            var userId = User.FindFirst(ClaimTypes.Sid).Value;
            var userName = User.Identity.Name;
 
            //获取用户名方法2
            string username2 = User.FindFirst(ClaimTypes.Name).Value;
            //获取名字叫password的值
            string password = User.FindFirst("password").Value;
 
 
            ViewBag.userId = userId;
            ViewBag.username = username2;
 
            return View();
        }

 注:使用如下特性可以在用户没有登录得时候请求登录方法(Controller与action都适用)

 [Authorize(ActiveAuthenticationSchemes="myuser")]


 5:退出登录方法(删除cookie)       

   public async Task<IActionResult> Exit()
        {
            await HttpContext.Authentication.SignOutAsync("myuser");   // Startup.cs中配置的验证方案名
 
            return RedirectToAction("index", "home");
        }

  可以看到cookie是加密后的


NET CORE中配合控制器使用加密cookie

在过滤器中限制除了登录本身都需要登录后才能访问

    public class IsLoginFilter:ActionFilterAttribute
    {     
        public override void OnActionExecuting(ActionExecutingContext context)
        {
            string controller = context.RouteData.Values["controller"].ToString();
            string action = context.RouteData.Values["action"].ToString();
 
            if (controller.ToLower() == "account")//忽略登录本身
                return;
 
 
            //检查是否登录
            var  sid = context.HttpContext.User.FindFirst(ClaimTypes.Sid);
 
            //表示用户没有登录跳转到登录页
            if (sid == null)
            {
                context.Result = new RedirectResult("/account/login");
            }
 
        }
    }






请先登录

{{item.title}}

{{item.content}}
不能简单的解决问题,那是设计与做法有问题
博主搜索
文章类别
CSS 5篇
云服务 2篇
Git 4篇
.NET 29篇
Android 0篇
软件架构 4篇
.NET Core 15篇
.NET MVC 3篇
英语 3篇
随笔 3篇
Bootstrap 1篇
Redis 12篇
编辑器 2篇
Js相关 6篇
Layui 2篇
Oracle 7篇
Python 2篇
数据库 2篇
EF 2篇
微信 2篇
前端 1篇
消息队列 1篇
最新文章
为什么要使用webapi而不直接使用controller
net core发布到IIS常见错误
net core依赖注入
NET CORE配置EF连接字符串
Net Core使用依赖注入来装载EF的上下文对象
下载net core
Sqlerver添加用户与授权
net core中使用url编码与解码操作
net core启动报错Unable to configure HTTPS endpoint. No server certificate was specified
.net core使用response
ef6动态添加条件
最新评价
{{item.ArticleTitle}}
{{item.BlogName}} : {{item.Content}}