我想知道如何设置一个全局变量,以便 ASP.net 网站的所有网页中的命令可以轻松访问该变量。
这将通过一个类来完成,我将如何调用它?
一个例子是持有一个唯一的用户 ID,但能够将该 ID 用于所有网页上的 SQL 查询。
我想知道如何设置一个全局变量,以便 ASP.net 网站的所有网页中的命令可以轻松访问该变量。
这将通过一个类来完成,我将如何调用它?
一个例子是持有一个唯一的用户 ID,但能够将该 ID 用于所有网页上的 SQL 查询。
显而易见的地方是Session
.
所以例如
Session["MyId"] = 99; // to set it
和
myId = Session["MyId"]; // to get it
有时会话会失败..所以另一个地方是 Cookies - 假设它不是敏感数据..
// Setting a cookie
HttpCookie myCookie = new HttpCookie("MyID");
DateTime now = DateTime.Now;
// Set the cookie value.
myCookie.Value = now.ToString();
// Set the cookie expiration date.
myCookie.Expires = now.AddMinutes(1);
// Add the cookie.
Response.Cookies.Add(myCookie);
您可以通过以下方式读取 cookie:
HttpCookie myCookie = Request.Cookies["MyId"];
myId = myCookie.Value;
这真的取决于具体的场景。您有多种选择,可以为您提供不同的行为。
通常对于成为命令参数的 ID,在生成链接以在页面之间传递它们时,您会将这些作为查询字符串参数包含在内。即,如果您有一个用于编辑用户的管理页面,您可能会生成一个带有 URL 的链接列表,例如:
/Users/Edit.aspx?userID=123
/Users/Edit.aspx?userID=789
对于当前用户的 ID,应该由您的身份验证机制提供。例如(根据您的身份验证方式,您的方案可能会有所不同): ASP.NET 成员身份:当前用户 ID 存储在哪里?
从那里,任何其他用户级别信息都可以通过外键在与用户 ID 相关的表中。
Session[] 适合当前用户的临时存储。它应该被视为临时的原因是如果应用程序池被回收,它将过期或丢失。在这种情况下,通常没问题,因为无论如何用户都必须重新登录并重新开始。只是不要存储任何真正重要的东西。
您可以使用静态类+静态属性来存储系统范围的信息。
我会避免饼干作为最后的手段。我的任何应用程序中涉及的唯一 cookie 是身份验证框架自动创建的 cookie,我从未直接接触过它们。对于用户或第三方对 cookie 的恶意操作,您必须考虑很多情况。