c#如何从asp.net会话cookie中获取会话

本文关键字:会话 cookie 获取 net asp | 更新日期: 2023-09-27 17:58:33

我对.net 非常熟悉

但基本上,我已经被告知,要使我的网站在要部署的环境中具有会话粘性,就意味着我必须从cookie ASP.NET_SessionId 中获取会话

但这意味着什么/我该如何使用它?

我在哪里使用现有的会话代码,例如Session.Add("Something", something),我现在需要更改吗?

c#如何从asp.net会话cookie中获取会话

这是自动的

您不必自己手动读取cookie。Asp.net为你做这件事。因此,每当您访问Session字典时,如果您以前的请求中存在会话,则该会话将被保留。如果没有(或已过期),它也将自动创建,因此向其中添加项目将使其正常工作。

因此,基本上不需要从cookie访问会话标识符并对其进行任何操作(因为您将无法访问内部会话存储),只需使用Session:

Session["SomeKey"] = myVar;
// or
Session.Add("SomeKey", myVar);

和用于读取

var o = Session["SomeKey"];

Cookie是强制性的吗

基本上,Asp.net支持除cookie之外的其他会话ID存储方式。如果需要,可以启用无烹饪会话(web.config文件中的设置)。会话标识符将添加到您的URL中,如:

http://www.example.com/(S(lit3py55t21z5v55vlm25s55))/orderform.aspx

在MSDN上阅读更多关于它的信息。

默认值是什么

默认情况下,会话标识符保留在cookie中。这意味着您不必更改web.config中的任何内容。但如果你想使用其他方式,你必须在web.config中设置它(检查与以前相同的上链接)。

通常,我在ASP.NET中使用会话变量的方式如下

// set
Session["SessionVariableName"] = localVariable;
// get
localVariable = Session["SessionVariableName"] as LocalType; // then check nulls

任何会话的问题都是,如果您不特意更改它,默认情况下会将会话存储在进程中,因此每次IIS回收工作进程时,您的会话都会丢失。使用内置的ASP.NET State Service可以很容易地解决此问题。快速搜索找到了这篇关于使用它的文章。

您可以通过多种方式获得对当前会话的引用,但最简单的方法是使用页面上的会话属性。

请参阅:http://msdn.microsoft.com/en-us/library/system.web.ui.page.session.aspx

会话粘性不是ASP.net的一个功能,而是一个可能位于其前面的负载均衡器。如果您使用InProc会话,则会话数据存储在服务器的内存中。对于"粘性"会话,负载均衡器将从同一源(通常基于IP)向同一服务器发送所有请求,以确保会话始终存在。

这不是处理web场场景的最具可扩展性的方法。Microsoft引入了另外两种机制,StateServerSqlServer,用于将会话数据发送到所有web前端的单个位置。

您可能只需要确保您的配置中没有将cookieless设置为true

无论这一切是如何配置的,您都将始终以相同的方式检索会话数据——ASP.NET将详细信息抽象掉。

// Set
Session["mySession"] = "Hello World";
// Get
var s = Session["mySession"];