[英]c# How to get session from asp.net session cookie
我对 .net 非常基础
但基本上我被告知要在要部署的环境中为我的网站提供 session 粘性意味着我必须从 cookie ASP.NET_SessionId
但这意味着什么/我该如何使用它?
我在哪里使用我现有的 session 代码,例如Session.Add("Something", something)
我现在需要更改它吗?
您不必自己手动阅读 cookies。 Asp.net 为您完成。 因此,每当您访问Session
字典时,您的 session 将已经被保留,如果它存在于您之前的请求中。 如果没有(或过期)它也将自动创建,因此向其中添加项目将使其正常工作。
So basically instead of accessing Session identifier from a cookies and do whatever with it (as you won't be able to access intrinsic session store), just use Session
:
Session["SomeKey"] = myVar;
// or
Session.Add("SomeKey", myVar);
和阅读
var o = Session["SomeKey"];
基本上 Asp.net 支持除 cookies 之外的其他 session ID 存储方式。 如果您愿意,可以启用无 cookie session( web.config
文件中的设置)。 Session 标识符将添加到您的 URL 中,例如:
http://www.example.com/(S(lit3py55t21z5v55vlm25s55))/orderform.aspx
在 MSDN 上阅读有关它的更多信息。
默认情况下 session 标识符保留在 cookies 中。 这意味着您不必更改web.config
中的任何内容。 但是,如果您想使用其他方式,则必须在web.config
中进行设置(检查与以前相同的上方链接)。
通常我在 ASP.NET 中使用 session 变量的方式是这样的
// set
Session["SessionVariableName"] = localVariable;
// get
localVariable = Session["SessionVariableName"] as LocalType; // then check nulls
任何会话的问题是,如果您不使用 go 进行更改,默认会在进程中存储会话,因此每次 IIS 回收工作进程时,您的 Z21D6F40CFB511982E597ZA 就会丢失。 这可以通过使用内置的 ASP.NET State 服务轻松解决。 快速搜索出现了这篇关于使用它的文章。
您可以通过多种方式获得对当前 session 的引用,但最简单的方法是使用页面上的 session 属性。
请参阅: http://msdn.microsoft.com/en-us/library/system.web.ui.page.session.aspx
// Set
Session["mySession"] = "Hello World";
// Get
var s = Session["mySession"];
Session 粘性不是 ASP.net 的功能,而是可能位于其前面的负载平衡器的功能。 如果您使用InProc
会话,则 session 数据存储在服务器的 memory 中。 使用“粘性”会话,负载均衡器会将来自同一源的所有请求(通常基于 IP)发送到同一台服务器,以确保 session 始终存在。
这不是处理 web 场方案的最具可扩展性的方法。 Microsoft 引入了另外两种机制, StateServer
和SqlServer
,它们用于将 session 数据发送到所有 web 前端的单个位置。
您可能只需要确保在您的配置中没有将cookieless
设置为true
。
不管这一切是如何配置的,您将始终以相同的方式检索您的 session 数据 - ASP.NET 抽象出细节。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.