Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET如何从SQL数据库获取当前登录的用户名和ID_C#_Asp.net_Sql_Linq - Fatal编程技术网

C# ASP.NET如何从SQL数据库获取当前登录的用户名和ID

C# ASP.NET如何从SQL数据库获取当前登录的用户名和ID,c#,asp.net,sql,linq,C#,Asp.net,Sql,Linq,我目前还是一名初级程序员,已经从以前的程序员那里接管了工作,我正忙于他的ASP.NET网站。他创建了自己的登录名,我不知道如何在只读文本框中显示当前登录的用户 文本框为只读的原因是,一旦用户登录到网站,插入到SQL数据库中的任何数据都会添加到当前登录的用户ID中,但为了方便起见,用户名会显示在只读文本框中 下面是login.aspx的代码 protected void LoginUser_Authenticate(object sender, AuthenticateEventArgs e)

我目前还是一名初级程序员,已经从以前的程序员那里接管了工作,我正忙于他的ASP.NET网站。他创建了自己的登录名,我不知道如何在只读文本框中显示当前登录的用户

文本框为只读的原因是,一旦用户登录到网站,插入到SQL数据库中的任何数据都会添加到当前登录的用户ID中,但为了方便起见,用户名会显示在只读文本框中

下面是login.aspx的代码

protected void LoginUser_Authenticate(object sender, AuthenticateEventArgs e)
    {
        LoggedMember member = new LoggedMember();

        if (LoginUser.UserName.Contains('@'))
        {
            member = Login.LogInContact(LoginUser.UserName, LoginUser.Password);
        }
        else
        {
            member = Login.LogInUser(LoginUser.UserName, LoginUser.Password);
        }

        if (member.ID != 0)
        {
            Session["LoggedMember"] = member;
            FormsAuthentication.SetAuthCookie(member.UserName, true);
            e.Authenticated = true;
            Response.Redirect("~/pages/Monitor.aspx");
        }
        else
        {
            Session["LoggedMember"] = null;
            e.Authenticated = false;
        }

    }
LoggedMember类

public class LoggedMember
{
    public int ID { get; set; }
    public string UserName { get; set; }
    public UserProfile Profile { get; set; }
}
登录类

public class Login
{
    public static LoggedMember LogInUser(string username, string password)
    {
        LoginContext db = new LoginContext();

        User user = db.Users.Where(u => u.UserName == username && u.Password == password).SingleOrDefault();

        LoggedMember member = new LoggedMember();
        if (user != null)
        {
            if (user.UserID != 0)
            {
                member = new LoggedMember()
                {
                    ID = user.UserID,
                    UserName = user.UserName
                };
            }
        }

        if (user != null)
        {
            member.Profile = UserProfile.GetUserProfileAndSettings((int)user.UserProfileID);
        }
        else
        {
            member.Profile = UserProfile.GetUserProfileAndSettings(0);
        }
        return member;
    }

    public static LoggedMember LogInContact(string username, string password)
    {
        LoginContext db = new LoginContext();

        Contact contact = db.Contacts.Where(u => u.Email == username && u.Password == password).SingleOrDefault();

        LoggedMember member = new LoggedMember();
        if (contact.ContactID != 0)
        {
            member = new LoggedMember()
            {
                ID = contact.ContactID,
                UserName = contact.FirstName + ' ' + contact.LastName
            };
        }

        return member;
    }
}
我如何将当前登录的用户名加载到只读文本框中,并在数据库中添加一条记录以获取当前登录用户的用户名

我正在使用C、Sql server和linq


谢谢

只需将用户名分配给文本框即可,如

要获取当前登录用户的UserID,需要调用select查询,如

您的用户名必须是唯一的,否则您将从此查询中获得多个用户名

您需要使用这种类型的场景


希望你能理解并为你工作

只需将用户名分配给文本框(如

要获取当前登录用户的UserID,需要调用select查询,如

您的用户名必须是唯一的,否则您将从此查询中获得多个用户名

您需要使用这种类型的场景


希望你能理解并为你工作

由于登录代码设置了forms auth cookie,您应该能够使用:

public static string GetUsername() {
    var ident = System.Web.HttpContext.Current.User.Identity;
    return ident.IsAuthenticated ? ident.Name : null;
}

由于登录代码设置了forms auth cookie,您应该能够使用:

public static string GetUsername() {
    var ident = System.Web.HttpContext.Current.User.Identity;
    return ident.IsAuthenticated ? ident.Name : null;
}

纯文本密码警报。。。有人需要提示:存储密码,甚至是加密密码,这是一个非常糟糕的主意;你应该用salt+hash来代替纯文本密码警报。。。有人需要提示:存储密码,甚至是加密密码,这是一个非常糟糕的主意;你应该用salt+hash来代替。对不起,我只是为了测试而将其设置为true,它最初是false。你的代码确实有效。但是我如何能够从插入文本框的值访问UserID呢。因为当我将数据插入SQL数据库时,我不添加用户名,而是插入userID's@user2343291存储复合值比较困难;您可以编写自定义主体,但这很复杂;您可以将登录名存储为12345:fred,但这需要更改当前访问它的任何代码。也许最简单的方法就是将name=>id映射缓存在内存中,然后向上查找。对不起,我将其设置为true只是为了测试,它最初是false。你的代码确实有效。但是我如何能够从插入文本框的值访问UserID呢。因为当我将数据插入SQL数据库时,我不添加用户名,而是插入userID's@user2343291存储复合值比较困难;您可以编写自定义主体,但这很复杂;您可以将登录名存储为12345:fred,但这需要更改当前访问它的任何代码。也许最简单的方法就是将name=>id映射缓存在内存中并查找它
public static string GetUsername() {
    var ident = System.Web.HttpContext.Current.User.Identity;
    return ident.IsAuthenticated ? ident.Name : null;
}