1

我想知道如何设置一个全局变量,以便 ASP.net 网站的所有网页中的命令可以轻松访问该变量。

这将通过一个类来完成,我将如何调用它?

一个例子是持有一个唯一的用户 ID,但能够将该 ID 用于所有网页上的 SQL 查询。

4

2 回答 2

4

显而易见的地方是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;
于 2012-12-05T19:14:01.287 回答
1

这真的取决于具体的场景。您有多种选择,可以为您提供不同的行为。

通常对于成为命令参数的 ID,在生成链接以在页面之间传递它们时,您会将这些作为查询字符串参数包含在内。即,如果您有一个用于编辑用户的管理页面,您可能会生成一个带有 URL 的链接列表,例如:

/Users/Edit.aspx?userID=123
/Users/Edit.aspx?userID=789

对于当前用户的 ID,应该由您的身份验证机制提供。例如(根据您的身份验证方式,您的方案可能会有所不同): ASP.NET 成员身份:当前用户 ID 存储在哪里?

从那里,任何其他用户级别信息都可以通过外键在与用户 ID 相关的表中。

Session[] 适合当前用户的临时存储。它应该被视为临时的原因是如果应用程序池被回收,它将过期或丢失。在这种情况下,通常没问题,因为无论如何用户都必须重新登录并重新开始。只是不要存储任何真正重要的东西。

您可以使用静态类+静态属性来存储系统范围的信息。

我会避免饼干作为最后的手段。我的任何应用程序中涉及的唯一 cookie 是身份验证框架自动创建的 cookie,我从未直接接触过它们。对于用户或第三方对 cookie 的恶意操作,您必须考虑很多情况。

于 2012-12-05T19:30:39.240 回答