陪你听风

.net core 使用依赖注入session

电脑版发表于:2019/12/18 19:17

tip:net core 2.2版本后可以直接启用session了,不用在自己添加一次session依赖,本身就添加了的

使用工具nuget包管理器 添加引用 Microsoft.AspNetCore.Session 

在nuget中执行命令 :Install-Package Microsoft.AspNetCore.Session


tip:假如这里不能注入成功的话,我们要后面跟上和项目一致的版本,在这里我的项目版本为2.1的,代码如下:

  

 在nuget中执行命令 :Install - Package Microsoft.AspNetCore.Session - Version 2.1.1
       
                install - package Microsoft.AspNetCore.http - version  2.1.1


更新 Startup.cs 使用需要的服务

注释:当添加完Microsoft.AspNetCore.Session依赖后很有可能在写 app.UseSession()  

        就是所谓的启动session 中间件

  

       app.UseStaticFiles();
            app.UseCookiePolicy();
      //启动session 中间件
      app.UseSession();

 

  前面还需要服务添加session  ,如图:

    

接下来就是session的存取操作了。

我们可以做一个简单·的登录,然后用session保存值。

  login视图 :代码如下:

  

<form method="post" action="/Acount/SignIn">
    用户名:<input type="text" name="userName" /><br />
    密  码:<input type="password" name="password" />  
    <input type="submit" value="登录" />
</form>

控制器代码如下:

  

 public IActionResult Login()
        {
            return View();
        }
  public IActionResult SignIn( string  UserName)
        {
            string UserName2 = Request.Form["UserName"];
            if (!string.IsNullOrWhiteSpace(UserName2))
            {
                  //存值
                HttpContext.Session.SetString("UserName", UserName);
                return RedirectToAction("index", "center");
            }
            return View();
        }

  存操作:在该控制器下存上用户名UserName,页面跳转到Center控制器读取数据值。

  

  取session值 代码如下:

 

 public IActionResult Index()
        {
             //取值
            string username = HttpContext.Session.GetString("UserName");
            if (string.IsNullOrWhiteSpace(username))
            {
                return RedirectToAction("login", "Account");
            }
            ViewBag.UserName = username;
            return View();
        }

    

   现在我们可以把项目跑起来,然后访问登录页面。会发现这里有个小坑。存的时候可以拿到值,但是取的时候值就为空。运行时如下图:

  



  错误的意思大概就是cookie被禁用了,但是如果浏览器的cookie被禁用的话,项目应该跑不起才对啊。

  后来才知道,在net core 中存在 GDPR规则问题


 

GDPR:《通用数据保护条例》(General Data Protection Regulation,简称GDPR)为欧洲联盟的条例

           2018年5月25日,欧洲联盟出台《通用数据保护条例》

 

 总之这玩意就是为了保护用户隐私数据的,如果企业滥用数据将会罚金。

            对违反规定的公司处罚高达其全球收入的 4%的罚金。如果亚马逊受到惩罚,罚款将为 70 亿美元

             当然适用性现在只适用于欧盟。


net core中,默认是开启了GDPR导致了cookie和session不能使用,如果要使用的话,最简单的就是在Startup.cs 中直接关闭


 

 我这里直接把那一段注释了就好啦,然后登录就可以拿到session存的值啦。


 好啦,今天内容就到这里了,现在大家对net core 里的session 应该重新有一个定义了吧。

关于TNBLOG
TNBLOG,技术分享。技术交流:群号677373950
ICP备案 :渝ICP备18016597号-1
App store Android
精彩评论
{{item.replyName}}
{{item.content}}
{{item.time}}
{{subpj.replyName}}
@{{subpj.beReplyName}}{{subpj.content}}
{{subpj.time}}
猜你喜欢