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

时间:2011-06-06 14:58:05

标签: c# asp.net session-state session-cookies

我非常基本的.net

但基本上我被告知,要在部署的环境中为我的网站设置会话粘性,这意味着我必须从cookie ASP.NET_SessionId获取会话

但这是什么意思/我该如何使用它?

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

5 个答案:

答案 0 :(得分:1)

这是自动化的

您不必亲自手动阅读Cookie。 Asp.net为您做到了。因此,每当您访问Session字典时,如果您的会话存在于您之前的请求中,则该会话将被保留。如果没有(或已过期),它也将自动创建,因此向其中添加项目将使其无问题地工作。

所以基本上不是从cookie访问会话标识符而是用它做任何事情(因为你将无法访问内部会话存储),只需使用Session

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

和阅读

var o = Session["SomeKey"];

Cookie是强制性的吗?

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

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

详细了解here on MSDN

什么是默认值?

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

答案 1 :(得分:0)

通常我在ASP.NET中使用会话变量的方式就像这样

// set
Session["SessionVariableName"] = localVariable;

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

任何会话的问题在于,如果您不想改变它,默认情况下将会话保存在进程中,因此每次IIS回收工作进程时,会话都会丢失。可以使用内置的ASP.NET状态服务轻松修复此问题。快速搜索了this有关使用它的文章。

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

// Set
Session["mySession"] = "Hello World";

// Get
var s = Session["mySession"];

答案 4 :(得分:0)

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

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

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

无论如何配置,您始终都会以相同的方式检索会话数据 - ASP.NET将详细信息抽象出来。