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 自定义登录退出鉴权判断
.net core 通过ProtectedSessionStorage 会话存储进行页面传值。案例前端采用Blazor

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/101701.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Redis】Redis哨兵模式

【Redis】Redis哨兵模式 Redis主从模式当主服务器宕机后&#xff0c;需要手动把一台从服务器切换为主服务器&#xff0c;需要人工干预费事费力&#xff0c;为了解决这个问题出现了哨兵模式。 哨兵模式是是一个管理多个 Redis 实例的工具&#xff0c;它可以实现对 Redis 的监控…

PHP自己的框架session()使用(完善篇六)

1、PHP自己的框架session() 2、session类&#xff08;SessionBase.php&#xff09; <?php class SessionBase {/*** 设置session*/public static function set($name, $data, $expire600){$session_data array();$session_data[data] $data;$session_data[expire] time…

零阶矩、一阶矩、二阶矩、…

数学中矩的概念来自物理学。在物理学中&#xff0c;矩是表示距离和物理量乘积的物理量&#xff0c;表征物体的空间分布。矩在统计学和图像中都有很重要作用&#xff0c;我们常用的Adam优化器其全称为自适应矩估计优化器。本文将介绍各阶矩的理解和不同场景的应用。 Key Words&a…

wazuh初探系列一 : wazuh环境配置

目录 方法一&#xff1a;一体化部署 安装先决条件 第一步、安装所有必需的软件包 第二步、安装Elasticsearch 1、添加 Elastic Stack 存储库 安装 GPG 密钥&#xff1a; 添加存储库&#xff1a; 更新源&#xff1a; 2、Elasticsearch安装和配置 安装 Elasticsearch 包…

2023年8月第3周大模型荟萃

2023年8月第3周大模型荟萃 2023.8.22版权声明&#xff1a;本文为博主chszs的原创文章&#xff0c;未经博主允许不得转载。 1、LLM-Adapters&#xff1a;可将多种适配器集成到大语言模型 来自新加坡科技设计大学和新加坡管理大学的研究人员发布了一篇题为《LLM-Adapters: An …

引领娱乐潮流:邀请明星办个人演唱会的五大关键步骤

随着娱乐产业的不断壮大和观众对明星的热情高涨&#xff0c;举办个人演唱会已经成为了一种广受欢迎的文化现象。这种活动不仅让粉丝们有机会亲身近距离感受偶像的音乐魅力&#xff0c;同时也为明星和品牌提供了一个宝贵的互动平台。然而&#xff0c;要成功地邀请明星办个人演唱…

【JAVA基础】 IO详解

【JAVA基础】 IO详解 文章目录 【JAVA基础】 IO详解一、概述二、IO流的作用三、IO流的使用场景四、IO流的分类4.1 传输数据的单位分&#xff1a;4.2 数据传输的方向分&#xff1a;4.3 流的角色的不同分&#xff1a; 五、IO流体系六、字节输入流InputStream七、字节输出流 Outpu…

华为云开发工具CodeArts IDE for C/C++ 开发使用指南

简介 CodeArts IDE是一个集成开发环境&#xff08;IDE&#xff09;&#xff0c;它提供了开发语言和调试服务。本文主要介绍CodeArts IDE for C/C的基本功能。 1.下载安装 CodeArts IDE for C/C 已开放公测&#xff0c;下载获取免费体验 2.新建C/C工程 CodeArts IDE for C/…

一网打尽java注解-克隆-面向对象设计原则-设计模式

文章目录 注解内置注解元注解 对象克隆为什么要克隆&#xff1f;如何克隆浅克隆深克隆 Java设计模式什么是设计模式&#xff1f;为什么要学习设计模式&#xff1f; 建模语言类接口类之间的关系依赖关系关联关系聚合关系组合关系继承关系实现关系 面向对象设计原则单一职责开闭原…

学Pyhton静不下来,看了一堆资料还是很迷茫是为什么

一、前言 最近发现&#xff0c;身边很多的小伙伴学Python都会遇到一个问题&#xff0c;就是资料也看了很多&#xff0c;也花了很多时间去学习但还是很迷茫&#xff0c;时间长了又发现之前学的知识点很多都忘了&#xff0c;都萌生出了想半路放弃的想法。 让我们看看蚂蚁金服的大…

Shell 编程快速入门 之 数学计算和函数基础

目录 1. 求两数之和 整数之和 浮点数之和 2. 计算1-100的和 for...in C风格for循环 while...do until...do while和until的区别 关系运算符 break与continue的区别 3. shell函数基础知识 函数定义 函数名 函数体 参数 返回值 return返回值的含义 return与…

薛定谔的日语学习小程序源码下载

这款学习日语的小程序源码&#xff0c;名为“薛定谔的日语”&#xff0c;首页展示了日语中的50音图&#xff0c;让用户能够看到日语词并跟读发音。 在掌握50音图后&#xff0c;用户还可以进行练习。小程序会随机提问50音图中的某一个&#xff0c;用户需要回答是否正确&#xf…

java八股文面试[java基础]——final 关键字作用

为什么局部内部类和匿名内部类只能访问final变量&#xff1a; 知识来源 【基础】final_哔哩哔哩_bilibili

Redis 整合中 Redisson 的使用

大家好 , 我是苏麟 , 今天带来 Redisson 使用 . 官方文档 : GitHub - redisson/redisson: Redisson - Easy Redis Java client with features of In-Memory Data Grid. Sync/Async/RxJava/Reactive API. Over 50 Redis based Java objects and services: Set, Multimap, Sorte…

DSO 系列文章(2)——DSO点帧管理策略

文章目录 1.点所构成的残差Residual的管理1.1.前端残差的状态1.2.后端点的残差的状态1.3.点的某个残差的删除 2.点Point的管理2.1.如何删除点——点Point的删除2.2.边缘化时删除哪些点&#xff1f; 3.帧FrameHessian的管理 DSO代码注释&#xff1a;https://github.com/Cc19245/…

深入浅出 TCP/IP 协议栈

TCP/IP 协议栈是一系列网络协议的总和&#xff0c;是构成网络通信的核心骨架&#xff0c;它定义了电子设备如何连入因特网&#xff0c;以及数据如何在它们之间进行传输。TCP/IP 协议采用4层结构&#xff0c;分别是应用层、传输层、网络层和链路层&#xff0c;每一层都呼叫它的下…

【Redis】Redis 的学习教程(一)入门基础

1. 简介 Redis 全称&#xff1a;Remote Dictionary Server&#xff08;远程字典服务器&#xff09;&#xff0c;是一款开源的&#xff0c;遵守 BSD 协议&#xff0c;使用 C 语言开发的 key-value 存储系统。简单的说&#xff0c;它是一款跨平台的非关系型数据库&#xff0c;支…

爬虫异常捕获与处理方法详解

Hey&#xff01;作为一名专业的爬虫代理供应商&#xff0c;我今天要和大家分享一些关于爬虫异常捕获与处理的方法。在进行爬虫操作时&#xff0c;我们经常会遇到各种异常情况&#xff0c;例如网络连接错误、请求超时、数据解析错误等等。这些异常情况可能会导致程序崩溃或数据丢…

Nest(3):扫盲篇:TypeScript 类和装饰器

前言 先回顾下前文中介绍了哪些内容&#xff1a; 使用 nestjs/cli 创建和管理 Nest 应用Hello, World 示例代码分析Nest 基本概念&#xff1a;模块&#xff0c;控制器&#xff0c;服务常用的装饰器&#xff1a;Module、Controller、Get、InjectableNest 目录结构分析nest/cli…