我正在编写我的第一个需要用户登录的Web应用程序,出于安全考虑,但我注意到在测试期间,一个用户输入的数据可能会出现在数据库中,就像它来自另一个用户一样。这可能听起来很幼稚,但坐在远程服务器上的应用程序是否会与当时使用它的人混淆? (我知道我不是很清楚),如果同时有两个用户,根应用程序将如何决定谁在做什么?
我使用静态类来保存成员资格数据,以便在整个Web应用程序中都可以看到它。也许那里有什么问题?
我一直在写桌面应用程序很长一段时间了,但这是我第一次编写一个应用程序,其中“引擎室”远离桌面。有人可以对正在发生的事情有所了解吗?
答案 0 :(得分: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和会员功能。您可以在Session中存储名称,但会话cookie的安全性低于框架中提供的身份验证库。
**即使您没有引用System.Web,也可以使用线程用户,但前提是在验证时设置了线程用户。