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 应该重新有一个定义了吧。