ASP.Net Core 会话

会话 Session  每一次会话都是新的  达到一个交谈  交谈的语境就是上下文

Session Key 当前会话的数据字典中,都是以Cookie的形式放到浏览器中的

在Asp.net 会话状态 在默认情况下是利用缓存的情况存储会话情况的,所以要添加AddDistributedMemoryCache用于基础内存的缓存服务

 

复制代码
public static class Sample01
    {
        public static void Start()
        {
            Host.CreateDefaultBuilder()
                .ConfigureWebHostDefaults(builder => builder
                    .ConfigureServices(collection => collection
                        //在Asp.net 在默认情况下是利用缓存的情况存储会话情况的,所以要添加AddDistributedMemoryCache用于基础内存的缓存服务
                        .AddDistributedMemoryCache()
                        .AddSession())//添加会话服务
                    .Configure(app => app
                        .UseSession()
                        .Run(ProcessAsync)))
                .Build()
                .Run();

            static async Task ProcessAsync(HttpContext context)
            {
                var session = context.Session;
                await session.LoadAsync();
                string sessionStartTime;

                if (session.TryGetValue("SessionStartTime", out var value))
                {
                    sessionStartTime = Encoding.UTF8.GetString(value);
                }
                else
                {
                    sessionStartTime = DateTime.Now.ToString(CultureInfo.InvariantCulture);
                    session.SetString("SessionStartTime", sessionStartTime);
                }

                context.Response.ContentType = "text/html";
                await context.Response.WriteAsync($"<html><body><ul><li>Session ID:{session.Id}</li>");
                await context.Response.WriteAsync($"<li>Session Start Time:{sessionStartTime}</li>");
                await context.Response.WriteAsync($"<li>Current Time:{DateTime.Now}</li></ul></table></body></html>");
            }
        }
    }
复制代码

 

 加上获取session key

复制代码
 public static class Sample02
    {
        public static void Start()
        {
            Host.CreateDefaultBuilder()
                .ConfigureWebHostDefaults(builder => builder
                    .ConfigureServices(collection => collection
                        .AddDistributedMemoryCache()
                        .AddSession())
                    .Configure(app => app
                        .UseSession()
                        .Run(ProcessAsync)))
                .Build()
                .Run();

            static async Task ProcessAsync(HttpContext context)
            {
                var session = context.Session;
                await session.LoadAsync();
                string sessionStartTime;

                if (session.TryGetValue("SessionStartTime", out var value))
                {
                    sessionStartTime = Encoding.UTF8.GetString(value);
                }
                else
                {
                    sessionStartTime = DateTime.Now.ToString(CultureInfo.InvariantCulture);
                    session.SetString("SessionStartTime", sessionStartTime);
                }

                // 使用反射获取Session Key
                var field = typeof(DistributedSession).GetTypeInfo().GetField("_sessionKey", BindingFlags.Instance | BindingFlags.NonPublic);
                var sessionKey = field?.GetValue(session);

                context.Response.ContentType = "text/html";
                await context.Response.WriteAsync($"<html><body><ul><li>Session ID:{session.Id}</li>");
                await context.Response.WriteAsync($"<li>Session Key:{sessionKey}</li>");
                await context.Response.WriteAsync($"<li>Session Start Time:{sessionStartTime}</li>");
                await context.Response.WriteAsync($"<li>Current Time:{DateTime.Now}</li></ul></table></body></html>");
            }
        }
    }
复制代码

 

posted @   根仔  阅读(95)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示