C# ASP.NET:响应后静态字典为空。重定向
我面临一个关于静态字典的问题,它似乎被“response.redirect”命令清空了 以下是主页的代码:C# ASP.NET:响应后静态字典为空。重定向,c#,asp.net,dictionary,response.redirect,C#,Asp.net,Dictionary,Response.redirect,我面临一个关于静态字典的问题,它似乎被“response.redirect”命令清空了 以下是主页的代码: public partial class Accueil : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { ... } protected void _Connect_Click(object sender, EventArgs e) {
public partial class Accueil : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{ ... }
protected void _Connect_Click(object sender, EventArgs e)
{
PlayerDao.LogIn(_Pseudo.Text, _Password.Text, HttpContext.Current.Session.SessionID);
Response.Redirect("~/Game/Index.aspx", true);
}
}
登录方法摘录:
public static void LogIn(string pseudo, string password, string sessionId)
{
...
Player.Dict.Add(sessionId, player);
...
}
还有播放器。Dict字典:
public class Player
{
private static Dictionary<string, Player> dict = new Dictionary<string, Player>();
public static Dictionary<string, Player> Dict
{
get { return dict; }
set { dict= value; }
}
...
}
公共类播放器
{
私有静态字典dict=新字典();
公共静态字典Dict
{
获取{return dict;}
设置{dict=value;}
}
...
}
就在Response.Redirect之前,字典仍然包含登录方法中添加的元素,但在Index.aspx Page_Load代码中,它是空的。
如果有人有想法,请放心,我一定是犯了一个愚蠢的错误,但我想不出来
谢谢 回想一下,记住网络是无状态的。这意味着您的字典正在服务器上的内存中创建。当您重定向到一个新页面时,您的上下文就是一个新请求的上下文,因此字典就不存在了。在新页面的page_load事件期间,您可以访问的唯一内容是您在page_load期间创建的内容,或者存储在会话或状态数据库中的内容。如果是特定于单个用户的信息,请使用会话。如果应用程序的所有用户都要共享这些数据(就像您的字典所要的那样),那么您需要将这些数据持久化,可能是在数据库中
我是在单个web服务器场景的上下文中回答这个问题的。当您的应用程序跨越多个web服务器时,会话将成为解决此问题的糟糕方法。在这种情况下,请使用数据库。闪回,请记住web是无状态的。这意味着您的字典正在服务器上的内存中创建。当您重定向到一个新页面时,您的上下文就是一个新请求的上下文,因此字典就不存在了。在新页面的page_load事件期间,您可以访问的唯一内容是您在page_load期间创建的内容,或者存储在会话或状态数据库中的内容。如果是特定于单个用户的信息,请使用会话。如果应用程序的所有用户都要共享这些数据(就像您的字典所要的那样),那么您需要将这些数据持久化,可能是在数据库中
我是在单个web服务器场景的上下文中回答这个问题的。当您的应用程序跨越多个web服务器时,会话将成为解决此问题的糟糕方法。在这种情况下,请使用数据库。闪回,请记住web是无状态的。这意味着您的字典正在服务器上的内存中创建。当您重定向到一个新页面时,您的上下文就是一个新请求的上下文,因此字典就不存在了。在新页面的page_load事件期间,您可以访问的唯一内容是您在page_load期间创建的内容,或者存储在会话或状态数据库中的内容。如果是特定于单个用户的信息,请使用会话。如果应用程序的所有用户都要共享这些数据(就像您的字典所要的那样),那么您需要将这些数据持久化,可能是在数据库中
我是在单个web服务器场景的上下文中回答这个问题的。当您的应用程序跨越多个web服务器时,会话将成为解决此问题的糟糕方法。在这种情况下,请使用数据库。闪回,请记住web是无状态的。这意味着您的字典正在服务器上的内存中创建。当您重定向到一个新页面时,您的上下文就是一个新请求的上下文,因此字典就不存在了。在新页面的page_load事件期间,您可以访问的唯一内容是您在page_load期间创建的内容,或者存储在会话或状态数据库中的内容。如果是特定于单个用户的信息,请使用会话。如果应用程序的所有用户都要共享这些数据(就像您的字典所要的那样),那么您需要将这些数据持久化,可能是在数据库中
我是在单个web服务器场景的上下文中回答这个问题的。当您的应用程序跨越多个web服务器时,会话将成为解决此问题的糟糕方法。在这种情况下,请使用数据库。这难道不是HTTP协议的工作原理吗?不太熟悉ASP.NET,但除非您在应用服务器上运行,否则在跳转页面后,内存中的任何数据都会丢失。@RoyalBg是的,不管ASP.NET如何,这就是它的工作方式。OP需要某种持久性,比如会话(如果是用户的话)或数据库(如果是全局的话)。HTTP协议不是这样工作的吗?不太熟悉ASP.NET,但除非您在应用服务器上运行,否则在跳转页面后,内存中的任何数据都会丢失。@RoyalBg是的,不管ASP.NET如何,这就是它的工作方式。OP需要某种持久性,比如会话(如果是用户的话)或数据库(如果是全局的话)。HTTP协议不是这样工作的吗?不太熟悉ASP.NET,但除非您在应用服务器上运行,否则在跳转页面后,内存中的任何数据都会丢失。@RoyalBg是的,不管ASP.NET如何,这就是它的工作方式。OP需要某种持久性,比如会话(如果是用户的话)或数据库(如果是全局的话)。HTTP协议不是这样工作的吗?不太熟悉ASP.NET,但除非您在应用服务器上运行,否则在跳转页面后,内存中的任何数据都会丢失。@RoyalBg是的,不管ASP.NET如何,这就是它的工作方式。OP需要某种持久性,例如会话(如果是针对用户的)或数据库(如果是全局的)。非常感谢您的回答!我是个新手,但我想实现的是以某种方式存储用户会话,以便使用sessionId从数据库中获取player对象。既然静态字典似乎不可能做到这一点,那么它是否应该存储在数据库中,存储在一个可以关联用户id和会话id的表中?对于您正在做的事情,我会说是的,一个数据库表