我应该在哪里创建用户会话

本文关键字:会话 用户 创建 在哪里 我应该 | 更新日期: 2023-09-27 18:20:19

我正在使用VS2010,C#开发一个自动化网站(ASP.NET web应用程序),该网站可能同时拥有数百名用户。我几乎已经完成了网站的创建,但我知道我犯了一些错误,其中之一是在代码绑定页面上使用公共静态变量,而不是为每个用户使用会话,现在当用户A更改页面中的设置时,用户B也会以与用户A完全相同的方式查看页面!,而不是在默认状态下查看页面。我有一个问题:我应该在哪里为每个用户声明会话?当用户登录时,我为每个用户创建一个会话,这是迄今为止我使用过的唯一会话:

Session.Add("userid" + myReader["ID"].ToString(), "true");

我应该在这里创建其他必要的会话吗?即在登录时?例如,我在负责查看DB:的页面上声明了一些公共静态变量

        public static string provinceid = "0";//0 means all
    public static string branchid = "0";
    public static string levelid = "0";
    public static string groupid = "0";
    public static string phrase = "";

我应该在登录时为他们每个人声明一个会话吗?或者我可以在每页开始时声明它们吗?

感谢

我应该在哪里创建用户会话

Session对象对于每个用户来说已经是唯一的-您不需要"创建"它。

使用静态变量会导致这些项目在所有线程之间共享(因此是所有用户)。这些可能应该转换为会话变量。

您不需要静态,只需执行以下操作:

Session["provinceid"] = "0";
Session["branchid"] = "0";
Session["levelid"] = "0";
Session["groupid"] = "0";
Session["phrase"] = "";

正如Oded在回答中提到的,Session对用户来说已经是唯一的,因此不需要使用"Add"方法。

无论何时处理完这些信息(用户注销等),都可以使用Session.Clear()方法,该方法将从Session对象中删除所有键和值。

我知道我犯了一些错误,其中之一就是使用公共代码隐藏页面上的静态变量

你说得对。在网络应用程序上这样做是非常糟糕的。

你不需要创建用户会话,因为当用户第一次访问你的网站时,它已经自动创建了。你需要什么来使用会话的方式你打算是这样的东西:

//Store value 
Session["Key"]=myValue;

//retrieve field
var myValue = Session["Key"];

您可以在任何您想要的页面上执行此操作,因为Session是一个全局对象;这不需要在登录页面上完成,但只要您需要存储特定于用户的任何内容。