我非常基本的.net
但基本上我被告知,要在部署的环境中为我的网站设置会话粘性,这意味着我必须从cookie ASP.NET_SessionId
获取会话
但这是什么意思/我该如何使用它?
我在使用现有会话代码的地方,例如Session.Add("Something", something)
我现在需要更改此内容吗?
答案 0 :(得分:1)
您不必亲自手动阅读Cookie。 Asp.net为您做到了。因此,每当您访问Session
字典时,如果您的会话存在于您之前的请求中,则该会话将被保留。如果没有(或已过期),它也将自动创建,因此向其中添加项目将使其无问题地工作。
所以基本上不是从cookie访问会话标识符而是用它做任何事情(因为你将无法访问内部会话存储),只需使用Session
:
Session["SomeKey"] = myVar;
// or
Session.Add("SomeKey", myVar);
和阅读
var o = Session["SomeKey"];
除了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引入了另外两种机制StateServer
和SqlServer
,用于将会话数据发送到所有Web前端的单个位置。
您可能只需要确保configuration中没有cookieless
设置为true
。
无论如何配置,您始终都会以相同的方式检索会话数据 - ASP.NET将详细信息抽象出来。