Blazor Session设置

news2024/9/28 13:28:55

文章目录

  • 前言
  • 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.coloradmin.cn/o/906793.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

每个.NET开发都应掌握的C#委托事件知识点

上篇文章讲述了C#接口的知识点&#xff0c;本文将介绍C#委托事件知识点。C#作为.NET开发的核心语言之一&#xff0c;提供了丰富的特性来支持面向对象编程和事件驱动的模型。其中&#xff0c;委托和事件是C#中不可或缺的关键概念&#xff0c;每个.NET开发者都应该深入理解它们的…

什么是原码、反码和补码

什么是原码、反码和补码 文章目录 什么是原码、反码和补码1、机器数2、原码3、反码4、补码5、总结 1、机器数 前言 一个数在计算机中的表示形式是二进制的话&#xff0c;这个数其实就叫机器数。 机器数通常是带有符号的&#xff08;指有正数和负数之分&#xff09;&#xff0c;…

【后端速成 Vue】第一个 Vue 程序

1、为什么要学习 Vue&#xff1f; 为什么使用 Vue? 回想之前&#xff0c;前后端交互的时候&#xff0c;前端收到后端响应的数据&#xff0c;接着将数据渲染到页面上&#xff0c;之前使用的是 JavaScript 或者 基于 JavaScript 的 Jquery&#xff0c;但是这两个用起来还是不太…

C++新经典08--范围for、new内存动态分配与nullptr

范围for语句 C语言部分学习过了for语句&#xff0c;在C11中for语句的能力被进一步扩展&#xff0c;引入了范围for语句&#xff0c;用于遍历一个序列。看看如下范例&#xff1a; int v[]{12,13,14,16,18};//数组ⅴ中每个元素依次放入x并打印x值。相当于把ⅴ的每个元素值复制到x…

第11步---MySQL的优化

第11步---MySQL的优化 1.概念 原先写功能。后来对平静进行优化 设计 查询语句 索引 存储 2.查看执行效率 -- 查看当前会话sql得执行类型得统计信息SHOW session STATUS like Com%上面展示得信息就是统计了当前会话得执行得操作得次数。 -- 查看全局得 SHOW GLOBAL STATU…

【C++入门到精通】C++入门 —— deque(STL)

阅读导航 前言一、deque简介1. 概念2. 特点 二、deque使用1. 基本操作&#xff08;增、删、查、改&#xff09;2. 底层结构 三、deque的缺陷四、 为什么选择deque作为stack和queue的底层默认容器总结温馨提示 前言 文章绑定了VS平台下std::deque的源码&#xff0c;大家可以下载…

SOLIDWORKS中一些不常用却很实用的功能介绍

1.过滤 FeatureManager 设计树 我们可以在FeatureManager 设计树过滤器中搜索特定的零件特征和装配体零部件。 2.添加文件夹和子文件夹 在零件或装配体文件中&#xff0c;您可添加文件夹到 FeatureManager 设计树内。 您可重新命名新的文件夹并将额外项目拖动到新的文件夹中。…

(一)Dubbo源码解析:增强SPI

〇、前言 在Dubbo的架构设计中&#xff0c;如何可以通过“类插拔”的方式&#xff0c;对其功能进行灵活的扩展或者削弱&#xff0c;那么&#xff0c;SPI起到了极其关键的作用。本篇文章作为分析Dubbo源码的第一篇文章&#xff0c;我们先暂时放下“服务注册发布流程”、“服务启…

Linux:shell脚本:基础使用(6)《正则表达式-awk工具》

简介 awk是行处理器: 相比较屏幕处理的优点&#xff0c;在处理庞大文件时不会出现内存溢出或是处理缓慢的问题&#xff0c;通常用来格式化文本信息 awk处理过程: 依次对每一行进行处理&#xff0c;然后输出 1&#xff09;awk命令会逐行读取文件的内容进行处理 2&#xff09;a…

攻防世界-disabled_button

原题解题思路 看页面源码 把这个删了就行

ESP32-C3 手动启用 Secure Boot V2 与 Flash 加密流程

ESP-IDF 中 flash 加密可以在 bootloader 阶段自动启用&#xff0c;但是这需要设备自加密后重启一次&#xff0c;为了节省这次重启的步骤&#xff0c;你可以选择通过一些脚本工具在外部启用 flash 加密。 本篇文档用于介绍 ESP32-C3 手动启用 Secure Boot V2 与 Flash 加密的操…

矩阵乘法(C++ mpi 并行实现)

矩阵乘法有2种思路&#xff0c;我最先想到的是第一种思路&#xff0c;但是时间、空间复杂度都比较高。后面参考了一些资料&#xff0c;实现了第二种思路。 一、思路1&#xff1a;按行、列分块 矩阵乘法有一个很好的性质&#xff0c;就是结果矩阵的每个元素是不互相依赖的&…

如何批量加密PDF文件并设置不同密码 - 批量PDF加密工具使用教程

如果你正在寻找一种方法来批量加密和保护你的PDF文件&#xff0c;批量PDF加密工具是一个不错的选择。 它是一个体积小巧但功能强大的Windows工具软件&#xff0c;能够批量给多个PDF文件加密和限制&#xff0c;包括设置打印限制、禁止文字复制&#xff0c;并增加独立的打开密码。…

React实战 - React路由鉴权

目录 一、React-Router知识回顾 二、路由鉴权应用分析 三、路由鉴权配置 四、权限控制 一、React-Router知识回顾 React-router相关的文章中我已经给大家演示了最基础的应用&#xff1a; <Switch ><Route path"/products/:id" component{ProductDetai…

【Rust】Rust学习 第十七章Rust 的面向对象特性

面向对象编程&#xff08;Object-Oriented Programming&#xff0c;OOP&#xff09;是一种模式化编程方式。对象&#xff08;Object&#xff09;来源于 20 世纪 60 年代的 Simula 编程语言。这些对象影响了 Alan Kay 的编程架构中对象之间的消息传递。他在 1967 年创造了 面向对…

Blob,File文件上传下载的内容笔记

Blob 对象表示一个不可变、原始数据的类文件对象&#xff0c;可以看做是存放二进制数据的容器 。 简单来说Blob就是一个二进制的对象&#xff0c;我们可以通过这个blob对象直接读取文件内容 Blob和Flie没什么区别&#xff0c;File继承于Blob,就是多了一个name属性&#xff0c;表…

当今职场,正在加速淘汰 “巨婴员工”

我担任过多家上市公司的技术高管职位&#xff0c;在工作中经常会遇到巨婴型员工&#xff0c;他们外在的表现是&#xff0c;不能够很好地管理自己&#xff0c;缺乏自律&#xff0c;缺乏起码的抗挫折能力和抗压能力&#xff0c;需要领导呵护着、同事们忍让着。作为一名管理者&…

科技成果鉴定测试有什么意义?专业CMA、CNAS软件测评公司

科技成果鉴定测试是指通过一系列科学的实验和检测手段&#xff0c;对科技成果进行客观评价和鉴定的过程。通过测试&#xff0c;可以对科技成果的技术优劣进行评估&#xff0c;从而为科技创新提供参考和指导。 一、科技成果鉴定测试的意义 1、帮助客户了解科技产品的性能特点和…

排序(七种排序)

1.插入排序 2.希尔排序 3.选择排序 4.堆排序 5.冒泡排序 6.快速排序 7.归并排序 1.插入排序 1.1思路 把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中&#xff0c;直到所有的记录插入完为 止&#xff0c;得到一个新的有序序列 1.2实现 //插入排…

[计算机入门] 个性化设置系统

3.2 个性化设置系统 在Windows系统中&#xff0c;个性化设置可以让用户根据自己的喜好和需求对系统进行定制和调整&#xff0c;包括桌面背景、声音、屏幕保护程序、鼠标指针、字体等。通过个性化设置&#xff0c;用户可以创建自己的独特界面和用户体验&#xff0c;使系统更加符…