【问题标题】:Using Stateserver Session in ASP.NET web farm在 ASP.NET 网络场中使用 Stateserver 会话
【发布时间】:2013-03-07 18:32:41
【问题描述】:

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

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

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

现在他被重定向到另一个页面后,我如何检索这个会话?根据我所读到的,我必须写:

temp=Session["abc"] 

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

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

【问题讨论】:

    标签: asp.net session session-state web-farm stateserver


    【解决方案1】:

    如果您不使用粘性会话(意味着一旦创建会话,您的负载均衡器将始终将请求保持在同一个框),那么您需要确保在 web.config 中配置了 OutOfProc 状态提供程序指向运行ASP.NET状态服务的服务器的IP地址——默认指向localhost——

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

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

    【讨论】:

      【解决方案2】:

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

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

      Session["abc"]=tmp;
      

      temp=Session["abc"] 
      

      所以,如果我为他们所有人创建一个 Session 用户名作为键,我如何检索他们的会话 浏览不同的页面?

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

      username=Session["username"] 
      

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

      This question 列出了使用 StateServer Session 时的一些问题

      【讨论】:

      • 非常感谢...最后的“注意”对我帮助很大..现在,我将尝试实现它.. :)
      猜你喜欢
      • 1970-01-01
      • 2010-12-11
      • 1970-01-01
      • 2010-12-23
      • 1970-01-01
      • 2010-11-29
      • 1970-01-01
      • 2019-01-04
      • 1970-01-01
      相关资源
      最近更新 更多