Blazor Session设置

编程入门 行业动态 更新时间:2024-10-12 05:47:16

<a href=https://www.elefans.com/category/jswz/34/1666979.html style=Blazor Session设置"/>

Blazor Session设置

文章目录

  • 前言
  • Session
    • ProtectedSessionStorage 类
      • 信息加密
      • 使用场景
    • 代码部分
      • Nuget扩展安装
      • 源码
        • 使用,
  • 相关资料

前言

微软官方封装了一些浏览器的操作,其中就有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 自定义登录退出鉴权判断
core 通过ProtectedSessionStorage 会话存储进行页面传值。案例前端采用Blazor

更多推荐

Blazor Session设置

本文发布于:2024-03-06 01:28:11,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1713993.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:Blazor   Session

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!