在ASP.NET web场中使用Stateserver会话

在ASP.NET web场中使用Stateserver会话,asp.net,session,session-state,web-farm,stateserver,Asp.net,Session,Session State,Web Farm,Stateserver,我已经创建了一个在线购物网站,它将部署在一个web服务器场上。因此,我决定使用ASP.NET提供的Stateserver会话管理。现在,我有了一个登录页面。用户成功登录后,我将他重定向到目录页面,在那里他可以随后将书籍添加到他的购物车中 据我所知,会话是以键值对的形式存储的。因此,如果我为一个特定的用户(比如他的名字是“abc”)创建一个会话,那么我会这样做: Session["abc"]=tmp; //where tmp is a "List" of items that "abc" has

我已经创建了一个在线购物网站,它将部署在一个web服务器场上。因此,我决定使用ASP.NET提供的Stateserver会话管理。现在,我有了一个登录页面。用户成功登录后,我将他重定向到目录页面,在那里他可以随后将书籍添加到他的购物车中

据我所知,会话是以键值对的形式存储的。因此,如果我为一个特定的用户(比如他的名字是“abc”)创建一个会话,那么我会这样做:

Session["abc"]=tmp; //where tmp is a "List" of items that "abc" has added to the cart
现在,在他被重定向到另一个页面后,我如何检索此会话?根据我所读到的,我必须写下:

temp=Session["abc"] 
如何将此用户名作为参数发送到其他页面。由于这是在一个web场上,因此客户端可以为每个请求连接到不同的服务器,并且可以有多个客户端同时登录。因此,如果我为他们所有人创建一个会话,并使用他们各自的用户名作为键,那么当他们浏览不同的页面时,我如何检索他们的会话

我认为我还不了解会话ID的确切工作原理,因此如果有人能帮助我,那就太好了

如何将此用户名作为参数发送到其他页面

你不需要发送它。对象不是页面响应的一部分,它位于服务器端。因此,您可以在A页上设置它,并能够使用您提供的相同代码在B页上检索它:

Session["abc"]=tmp;

因此,如果我为所有人创建一个会话,并使用他们各自的 用户名作为键,当它们被激活时,我如何检索它们的会话 浏览不同的网页

您可以使用用于在会话中存储对象的相同密钥检索它。事实上,您可以对所有用户使用相同的密钥。例如:

username=Session["username"] 
注意:.Net将使用分配给每个用户的唯一标识符(用户的SessionId)检索每个对象的正确实例。但是,这对代码是透明的


列出了使用StateServer会话时的一些问题,如果您没有使用粘性会话(这意味着一旦创建会话,负载平衡器将始终将请求保持在同一个框中)然后,您需要确保在web.config中,OutOfProc状态提供程序配置为指向运行ASP.NET状态服务的服务器的IP地址—默认情况下,它指向本地主机-

此外,您需要确保您在会话中放置的所有内容都是可序列化的(即,使用[Serializable]属性装饰您的类)

根据我的经验,我总是看到在负载平衡器上打开粘性会话,因为这是最简单的方法。如果不使用粘性会话,那么我可能会使用SQL状态提供程序或其他东西(可以更快地进行反序列化/序列化的其他产品)来处理此问题。

非常感谢。。。最后一张“便条”对我帮助很大。。现在,我将尝试实现这一点:)
username=Session["username"]