我正在编写我的第一个 Web 应用程序,出于安全原因需要用户登录,但我注意到在测试期间,一个用户输入的数据可能会出现在数据库中,就好像它来自另一个用户一样。这听起来可能很幼稚,但是远程服务器上的应用程序是否会混淆当时谁在使用它?(我知道我不是很清楚),如果有两个同时用户,根应用程序将如何决定谁在做什么?
我使用一个静态类来保存会员数据,以便在整个 Web 应用程序中都可以看到它。也许那里有问题?我已经编写桌面应用程序很长时间了,但这是我第一次编写“机房”远离桌面的应用程序。
问问题
34 次
1 回答
1
我不知道您的真实代码是什么样的,但您说的是“静态”,所以这是我首先想象的:
public class CurrentUser
{
public static string UserName{get;set;}
}
上面的意思是 UserName 属性是为整个 AppDomain 共享的,在 ASP.NET 应用程序中是指整个网站(不包括同一 IIS 服务器上的其他网站)。所以会有一场比赛,看谁可以先设置值,但该值将被读取为最后写入的值。Joe 登录,Jack 登录,Joe 将记录写入数据库并检查获取 Jack 名字的静态值。
更合适的方法是设置HttpContext User或Thread User **,这两者都可以在任何地方和任何引用 System.Web 的程序集中使用。您最好尽可能地依赖FormsAuthentication和 Membership 功能。您可以在 Session 中存储名称,但 Session cookie 不如框架中提供的身份验证库安全。
** 即使您不引用 System.Web,线程用户也可用,但前提是您在身份验证时设置了线程用户。
于 2012-10-20T21:40:29.830 回答