首页 > 其他分享 >Session

Session

时间:2024-08-19 10:08:59浏览次数:9  
标签:存储 string app Session services public

Startup.cs 文件中进行配置

public void ConfigureServices(IServiceCollection services)
{
    services.AddDistributedMemoryCache(); // 使用内存作为缓存存储 Session
    services.AddSession(options =>
    {
        options.IdleTimeout = TimeSpan.FromMinutes(30); // 设置 Session 的过期时间
        options.Cookie.HttpOnly = true; // 使 cookie 仅通过 HTTP 传输
        options.Cookie.IsEssential = true; // 在 GDPR 下使 cookie 必须
    });

    services.AddControllersWithViews(); // 或者 services.AddRazorPages();
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
        app.UseExceptionHandler("/Home/Error");
        app.UseHsts();
    }
    
    app.UseHttpsRedirection();
    app.UseStaticFiles();

    app.UseRouting();

    app.UseSession(); // 使用 Session 中间件

    app.UseAuthorization();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllerRoute(
            name: "default",
            pattern: "{controller=Home}/{action=Index}/{id?}");
    });
}

在控制器中使用 Session

using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;

public class HomeController : Controller
{
    public IActionResult Index()
    {
        // 存储信息到 Session
        HttpContext.Session.SetString("UserName", "John Doe");

        // 读取 Session 中的信息
        string userName = HttpContext.Session.GetString("UserName");

        ViewBag.UserName = userName;
        return View();
    }
}

使用扩展方法
.NET Core 提供了方便的扩展方法来存储和检索不同类型的数据:

SetString(string key, string value)
GetString(string key)
SetInt32(string key, int value)
GetInt32(string key)
如果需要存储复杂对象,可以将其序列化为 JSON 字符串,然后使用 SetString 存储,再用 GetString 读取后反序列化。

// 存储复杂对象
var myObject = new MyClass { Property1 = "Value1", Property2 = 123 };
HttpContext.Session.SetString("MyObject", JsonConvert.SerializeObject(myObject));

// 读取复杂对象
var myObjectJson = HttpContext.Session.GetString("MyObject");
if (myObjectJson != null)
{
    var myObject = JsonConvert.DeserializeObject<MyClass>(myObjectJson);
}

注意事项
Session 的数据存储在服务器端,客户端只保存一个 Session ID 的 cookie。当用户首次访问应用程序时,服务器会生成一个唯一的 Session ID,并将这个 Session ID 存储在一个名为 .AspNetCore.Session 的 Cookie 中 这个 Cookie 会在后续的请求中自动发送到服务器,以便服务器识别用户的 Session。
默认情况下,Session 使用内存缓存存储数据。如果您的应用程序需要在多个服务器之间共享 Session,可以考虑使用分布式缓存(如 Redis 或 SQL Server)。Session 的实际数据(如字符串、整数、对象等)是存储在服务器端的内存中,或者存储在配置的分布式缓存(例如 Redis、SQL Server)中。
服务器使用从客户端发送的 Session ID 来查找并获取相应的 Session 数据。
这样,可以在 .NET Core 中使用 Session 来保持用户数据或其他会话相关的信息。

标签:存储,string,app,Session,services,public
From: https://www.cnblogs.com/JosenEarth/p/18366762

相关文章

  • Cookie和Session的区别
    Cookie:Cookie是保存在客户端的一小块文本串的数据。客户端向服务器发起请求时,服务端会向客户端发送一个Cookie,客户端就把Cookie保存起来。在客户端下次向同一服务器再发起请求时,Cookie被携带发送到服务器。服务端可以根据这个Cookie判断用户的身份和状态。Session:Sessi......
  • session概念和底层原理——生命周期
    session–(会话)一、概念session在网络应用中称为“会话控制”,是服务器为了保存用户状态而创建的一个特殊的对象。简而言之,session就是一个对象,用于存储信息。二、使用和注意事项session是以键值对的形式存放数据,类型为**<String,Object>**,通过getAttribute()和setAttri......
  • Web开发:C# MVC + Session机制实现授权免登录demo
    token基础demo【需求】Home/Index登录界面,校验成功后可以登录到Main/Index,用户登录3分钟内关闭网站,再次访问Home/Index时可以免密登录Main/Index【配置文件-Program.cs】varbuilder=WebApplication.CreateBuilder(args);//Addservicestothecontainer.buil......
  • Session文件包含
    Session文件包含Session文件Session文件的储存由session.save_path来设置​​默认路径/var/lib/php/sess_PHPSESSID/var/lib/php/sessions/sess_PHPSESSID/tmp/sess_PHPSESSID/tmp/sessions/sess_PHPSESSID命名格式默认情况下,session.use_strict_mode​值是0,此......
  • Session的工作原理、Session与Token的区别
    Session是一种在无状态的HTTP协议中用来实现用户状态管理的机制。它通过在服务器端保存用户的状态信息,并通过客户端在每次请求时传递一个唯一的标识符(通常称为SessionID),实现了在多个请求之间维持用户的会话状态。一、Session的工作原理:客户端发送请求:用户首次访问网站......
  • Cookie、localStorage 和 sessionStorage 的区别及应用实例
    在前端开发中,持久化数据存储是一个非常常见的需求。为了实现这一点,浏览器提供了多种方式,包括Cookie、localStorage和sessionStorage。这三者各有优劣,适用于不同的场景1.CookieCookie是浏览器存储少量数据的一种机制,通常由服务器生成并发送到客户端。每次客户端向同一域名发......
  • Java网络编程——Cookie & Session
    cookie前面我们学习Okhttp3库可以调用API、抓取网页、下载文件。但是这些操作都是不要求登录的,如果API、网页、文件等内容要求登录才能访问,就需要学习新的cookie相关的知识了。下面以豆瓣为例,使用Java程序读取“我的豆瓣”页面内容,在此过程中熟悉运用cookie。所......
  • 【待看】一周一深入之深入剖析PHP反序列化phar、session、soap反序列化
    引言接上个文章,一周一深入之深入剖析PHP反序列化上个文章把php反序列化的基础以及trick总结完了,这篇文章就总结一下PHP常见的三个组件反序列化,Phar、session、soap反序列化。一周一深入之深入剖析PHP反序列化phar、session、soap反序列化引言一、什么是Phar以及Phar反序列化Phar......
  • 【会话控制】cookie、session和token
    一、介绍所谓会话控制就是对会话进行控制,HTTP是一种无状态的协议,它没有办法区分多次的请求是否来自于同一个客户端,无法区分用户,而产品中又大量存在的这样的需求,所以我们需要通过会话控制来解决该问题。常见的会话控制技术有三种:cookiesessiontoken......
  • cookie是什么?和session有什么区别?
    Cookie和Session都是用于跟踪用户会话状态的技术,但它们以不同的方式工作,并且存储位置不同。Cookie:定义:Cookie是小型的数据文件,由服务器发送到客户端浏览器,然后浏览器将这些数据存储在用户的本地硬盘上,当浏览器再次请求同一网站时,它会将这些Cookie发送回服务器。存储位置......