Blazor Session设置

前言

微软官方封装了一些浏览器的操作,其中就有Session的操作的封装

ProtectedSessionStorage 微软文档

因为我们知道,依赖注入的生命周期是

  • Singleton
    • 程序
  • Scoped
    • 网页:刷新,url直接跳转都会重置。
  • Transient
    • 路由

C# Blazor 学习笔记(10):依赖注入

但是没有一个和浏览器绑定的生命周期。即浏览器关闭才会退出。这个是后端无法获取的,因为后端根本不知道浏览器何时关闭。这个只能用浏览器自带的缓存。

Session

ProtectedSessionStorage 类

在这里插入图片描述

这个生命周期就很合适,就是你关闭浏览器了之后,信息就被抛弃了。这样网页刷新就不会丢失重要的信息。

一般和浏览器绑定的信息就是用户登录信息。

信息加密

ProtectedSessionStorage 类设置的信息是加密后的,所以看不到明文的信息。
在这里插入图片描述

CfDJ8Nur05I3Pu9OpTBL2jsIpP7iUkAMt6zG-CR1F5rHDriRSBlcJhnDIdmHxNEpoOoLe-atllUwiJM2zghFJE75-G_YV4VsgnO2O7jaBJsXvVf0RgaDfCDgtba81v3tUAsCQb_vJEnh5MDX-pWuTyxOaJjb-kicjqw2CU_DXa-0spbZXm-YfwsrQWyhGqm7q67T5_3y4SEbYSvMd7Lvvud1tTg_z1OUcWrSJhW_Exp6OWYmZqYOC5EpgsnkhSzrgqDvIMB2-FbZXjSNqj6NYvn1j7-FyVWvmiNtH-c9aVnY06GkdCJ0KH9X9xz1AG4GSGVxLB5As0nT4ZnzXyFQzGy47UCCdtCtdncVCjZLrMpGu4IPrvvifJpkCCxM466wYOJ070E9zz6agcY1YhPwDAY4CkE

使用场景

一般就是记录用户信息的,目的就是为了防止网页刷新的时候丢失用户信息。或者存放Token。理论上Session存的信息不能明文保存。

代码部分

我这里的代码进行了封装

  • public class SessionObjectHelper
    • Session帮助类
  • public enum MySessionKey
    • Key类
  • public static class MySessionExtension
    • Key的扩展方法

Nuget扩展安装

在这里插入图片描述
Newtonsoft.json:C#序列化

源码

using Microsoft.AspNetCore.Components.Server.ProtectedBrowserStorage;
using Newtonsoft.Json;

namespace EmptyBlazorApp1.Service
{
    public class SessionObjectHelper
    {
        private ProtectedSessionStorage _sessionStorage;
        

        public SessionObjectHelper(ProtectedSessionStorage storage)
        {
            _sessionStorage = storage;
            MySessionExtension.SessionStorage = storage;
            
        }

      

        public async Task<string> GetSession(string key) 
        {
            var value = await _sessionStorage.GetAsync<string>(key);

            return value.Success ? value.Value : "";
        }


        public async Task SetSession(string key, object value)
        {
            string valueStr = JsonConvert.SerializeObject(value, Formatting.None);

            await _sessionStorage.SetAsync(key, valueStr);
        }

        public async Task<string> GetSession(MySessionKey key)
        {
            var value = await _sessionStorage.GetAsync<string>(key.ToString());

            return value.Success ? value.Value : "";
        }

        public async Task<T> GetSession<T>(MySessionKey key) where T : class
        {
            var value = await _sessionStorage.GetAsync<string>(key.ToString());
            //var res = new T();
            var  res = value.Success ? JsonConvert.DeserializeObject<T>(value.Value) : null;
            return res;
        }


        public async Task SetSession(MySessionKey key, object value)
        {
            string valueStr = JsonConvert.SerializeObject(value, Formatting.None);

            await _sessionStorage.SetAsync(key.ToString(), valueStr);
        }





     


       
    }


    public enum MySessionKey
    {
        User,
    }

    public static class MySessionExtension
    {
        public static ProtectedSessionStorage SessionStorage { get; set; }

        public static async Task SetSession(this MySessionKey key, object value)
        {
            string valueStr = JsonConvert.SerializeObject(value, Formatting.None);

            await SessionStorage.SetAsync(key.ToString(), valueStr);
        }

        public static async Task<T> GetSession<T>(this MySessionKey key) where T : class
        {
            var value = await SessionStorage.GetAsync<string>(key.ToString());
            //var res = new T();
            var res = value.Success ? JsonConvert.DeserializeObject<T>(value.Value) : null;
            return res;
        }

    }
}

使用,

在builder里面注入

services.AddScoped<SessionObjectHelper>();

使用

        /// <summary>
        /// 注入自定义Session依赖
        /// </summary>
        [Inject]
        private SessionObjectHelper sessionObjectHelper { get; set; }
.......
/// <summary>
/// 双击点击跳转
/// </summary>
/// <param name="t_User"></param>
/// <returns></returns>
private async Task DoubleClickRowCallback(T_User t_User)
{
    //设置值,可以直接传实体对象进去
    await MySessionKey.User.SetSession(t_User);
    //得到值,要设定泛型对象
    var res = await MySessionKey.User.GetSession<T_User>();
    navigationManager.NavigateTo($"/user/{t_User.Id}");
}

MySessionKey中添加放在浏览器Session里面的Key,然后使用

相关资料

ProtectedSessionStorage 微软文档

C# Blazor 学习笔记(10):依赖注入

Blazor Server 自定义登录退出鉴权判断
.net core 通过ProtectedSessionStorage 会话存储进行页面传值。案例前端采用Blazor

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值