解析Asp.net如何使用Session


本文摘自PHP中文网,作者Y2J,侵删。

Session 是保存用户和 Web 应用的会话状态的一种方法,ASP.NET Core 提供了一个用于管理会话状态的中间件,本篇文章主要介绍了Asp.net Core中使用Session ,有兴趣的可以了解一下、

前言

2017年就这么悄无声息的开始了,2017年对我来说又是特别重要的一年。

元旦放假在家写了个Asp.net Core验证码登录, 做demo的过程中遇到两个小问题,第一是在Asp.net Core中引用dll,以往我们引用DLL都是直接引用,在Core里这样是不行的,必须基于NuGet添加,或者基于project.json添加,然后保存VS会启动还原类库。

第二就是使用Session的问题,Core里使用Session需要添加Session类库。

添加Session

在你的项目上基于NuGet添加:Microsoft.AspNetCore.Session。

修改startup.cs

在startup.cs找到方法ConfigureServices(IServiceCollection services) 注入Session(这个地方是Asp.net Core pipeline):services.AddSession();

接下来我们要告诉Asp.net Core使用内存存储Session数据,在Configure(IApplicationBuilder app,...)中添加代码:app.UserSession();

Session

1、在MVC Controller里使用HttpContext.Session

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

using Microsoft.AspNetCore.Http;

 

public class HomeController:Controller

{

   public IActionResult Index()

   {

       HttpContext.Session.SetString("code","123456");

       return View();

    }

 

    public IActionResult About()

    {

       ViewBag.Code=HttpContext.Session.GetString("code");

       return View();

    }

}

2、如果不是在Controller里,你可以注入IHttpContextAccessor

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

public class SomeOtherClass

{

   private readonly IHttpContextAccessor _httpContextAccessor;

   private ISession _session=> _httpContextAccessor.HttpContext.Session;

 

   public SomeOtherClass(IHttpContextAccessor httpContextAccessor)

   {

      _httpContextAccessor=httpContextAccessor;      

   }

 

   public void Set()

   {

     _session.SetString("code","123456");

   }

   

   public void Get()

  {

     string code = _session.GetString("code");

   }

}

存储复杂对象

存储对象时把对象序列化成一个json字符串存储。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

public static class SessionExtensions

{

   public static void SetObjectAsJson(this ISession session, string key, object value)

  {

    session.SetString(key, JsonConvert.SerializeObject(value));

  }

 

  public static T GetObjectFromJson<T>(this ISession session, string key)

  {

    var value = session.GetString(key);

 

    return value == null ? default(T) : JsonConvert.DeserializeObject<T>(value);

  }

}

1

2

3

4

5

var myComplexObject = new MyClass();

HttpContext.Session.SetObjectAsJson("Test", myComplexObject);

 

 

var myComplexObject = HttpContext.Session.GetObjectFromJson<MyClass>("Test");

使用SQL Server或Redis存储

1、SQL Server

添加引用 "Microsoft.Extensions.Caching.SqlServer": "1.0.0"

注入:

1

2

3

4

5

6

7

8

// Microsoft SQL Server implementation of IDistributedCache.

// Note that this would require setting up the session state database.

services.AddSqlServerCache(o =>

{

  o.ConnectionString = "Server=.;Database=ASPNET5SessionState;Trusted_Connection=True;";

  o.SchemaName = "dbo";

  o.TableName = "Sessions";

});

2、Redis

添加引用 "Microsoft.Extensions.Caching.Redis": "1.0.0"

注入:

1

2

3

// Redis implementation of IDistributedCache.

// This will override any previously registered IDistributedCache service.

services.AddSingleton<IDistributedCache, RedisCache>();

【相关推荐】

1. ASP免费视频教程

2. ASP教程

3. 李炎恢ASP基础视频教程

以上就是解析Asp.net如何使用Session的详细内容!

相关阅读 >>

实例介绍asp.net项目开发中枚举的使用

asp.net中partial class部分类

《asp.net》数据的绑定―repeater图文详解

在iis上部署asp.net core项目的步骤

分享asp.net学习笔记(7)webpages 对象详解

分享asp.net mvc4如何实现通过id更新表单内容的实例分析

分享asp.net学习笔记(12)razor 简介

linux下搭建.net core环境方法步骤

asp.net简单的格式转换方法

解决 asp.net core mysql varchar 字符串截取实例教程

更多相关阅读请进入《core》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...