2013-03-19 117 views
0

我创建了一个网上购物网站,该网站将部署在网络农场中。由于这个原因,我决定使用ASP.NET提供的Stateserver Session Management。现在,我有一个登录页面。用户成功登录后,我将他重定向到目录页面,随后他可以将书籍添加到他的购物车。在ASP.NET网络农场中使用状态服务器会话

从我所了解的内容来看,会话是以键值对的形式存储的。所以,如果我创建一个会话特定用户(比方说他的名字是“ABC”),那么我会做这样的事情:他将被重定向到另一个页面后

Session["abc"]=tmp; //where tmp is a "List" of items that "abc" has added to the cart 

现在,我该如何找回这个会议?从我读过的东西我必须写:

temp=Session["abc"] 

如何将此用户名作为参数发送到另一页。因为这是在Web场上,客户端可以连接到每个请求的不同服务器,并且可能有多个客户端同时登录。因此,如果我以他们各自的用户名为关键字为他们创建一个会话,在浏览不同页面时如何检索他们的会话?

我不认为我已经理解了会话ID的确切工作,所以如果有人能帮助我,那就太好了。

回答

0

如何将此用户名作为参数发送到另一个页面。

你不需要发送它Session对象不是页面响应的一部分,它位于服务器端。因此,你可以把它放在网页A,并能够使用您提供相同的代码来获取它第B:

Session["abc"]=tmp; 

而且

temp=Session["abc"] 

所以,如果我为所有人创造一个会话他们各自的 用户名为密钥,我如何在 浏览不同的页面时如何检索他们的会话?

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

username=Session["username"] 

注:净将通过使用一个唯一的标识符被分配给每个用户(用户的会话ID)检索每个对象正确的实例。然而,这对你的代码是透明的。

This question列表如果你没有使用粘性会话(这意味着一旦创建了会话,负载平衡器会始终保持请求到同一系统)使用StateServer会话

+0

非常感谢......最后的“注释”对我有很大的帮助。现在,我将试着实现这个.. :) – 2013-03-19 13:33:02

1

当几个陷阱,那么你需要请确保在您的web.config中将OutOfProc状态提供程序配置为指向运行ASP的服务器的IP地址。NET状态服务 - 默认情况下,它指向localhost-

另外,你需要确保你把会话一切都是序列化(即用[Serializable]属性修饰你的类)

以我的经验,我一直在负载平衡器上看到粘性会话被打开,因为这是最简单的方法。如果不使用粘性会话,那么我可能会使用SQL状态提供程序或其他某些可以更快地执行de/serialization的产品来处理此问题。