winforms 如何保持用户登录,即使应用程序关闭SQL C#

8yoxcaq7  于 2023-08-07  发布在  C#
关注(0)|答案(3)|浏览(95)

我有一个Windows应用程序项目,用户可以使用他们的用户ID和密码登录。我使用SQL来实现这个目的。我想让它,以便当用户登录并退出应用程序的应用程序将要求登录细节,只有当他注销。如果他在没有注销的情况下关闭应用程序,则不会显示登录窗口。如何才能做到这一点?

fbcarpbf

fbcarpbf1#

您可以保存登录用户名并将登录复选框状态保存在xml文件(不推荐)或bin文件(推荐)或属性设置(最佳方式)中,并使用if条件LOGINBUTTON检索值:

If(keeplogin_checkbox=checked)
    {
     Properties.settings.default.username=username_textbox.text;
     Properties.settings.default.keeplogin=true;
     Properties.Settings.Default.Save();
     }else
     {Properties.settings.default.keeplogin=false;
      Properties.Settings.Default.Save(); 
      }

字符串
当您选中保持登录复选框和登录第一次登录将保持状态设置
然后你去programs.cs文件中的代码要确定从任何形式从主窗体或登录窗体开始取决于属性设置中的测试值keeplogin值

if (Properties.Settings.Default.keeplogin == false)
        {
         Application.Run(new LOGIN_FORM());
        }
        else
        {
            Application.Run(new MAIN_FORM());
        }
    }


之后,您可以在主窗体中创建注销按钮:

{
        Properties.Settings.Default.username = " ";
        Properties.Settings.Default.keeplogin = false;
        Properties.Settings.Default.Save();
        }

eni9jsuy

eni9jsuy2#

在我看来,仅仅添加一个设置是行不通的。
如果用户标识和密码存储在SQL数据表中,则可以添加另一个bool列并更新该列。
例如,您有一个名为ABC的用户。当他登录时,SQL数据表中ABC的用户ID被设置为true值。无论何时加载应用程序或显示表单,都会检查ABC是否已登录(请记住,我们有bool列可供检查),如果为真,则永远不会显示登录窗口。
这可能是一个更简单、可行和安全的解决方案。

编辑:

请使用下面的链接查看向SQL数据表添加列的指南。
https://www.youtube.com/watch?v=NX8-LhgFnUU
但不是像视频中那样添加3列,而是添加4列,并将第4列命名为“Logged”,并将其类型设置为bool。
另外,请编辑视频中显示的代码如下(你也可以复制粘贴)

SqlConnection sqlConnection1 = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Do Not Delete\LoginApp\DB\LoginDB.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True");
    SqlCommand cmd = new SqlCommand();
    SqlDataReader reader;
    
    cmd.CommandText = "SELECT * FROM Logged";
    cmd.CommandType = CommandType.Text;
    cmd.Connection = sqlConnection1;
    
    sqlConnection1.Open();
    
    reader = cmd.ExecuteReader();
    // Data is accessible through the DataReader object here.
    
    DataTable dt = new DataTable();
    dt.Load(reader);
    
    sqlConnection1.Close();

    DataRow drow = dt.Rows[0];
    bool value = drow.Field<bool>("Logged");

if(value == false)
{
   SqlConnection sqlcon = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Do Not Delete\LoginApp\DB\LoginDB.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True");
            string query = "Select * from tbl_Login Where username = '" + txtUsername.Text.Trim() + "' and password = '" + txtPassword.Text.Trim() + "'";
            SqlDataAdapter sda = new SqlDataAdapter(query, sqlcon);
            DataTable dtbl = new DataTable();
            sda.Fill(dtbl);
            if (dtbl.Rows.Count == 1)
            {
                dtbl.Rows[0].Cells[3].Value = true;
                sda.Update(dtPrimary);
                sqlcon.Close();
                frmMain objFrmMain = new frmMain();
                this.Hide();
                objFrmMain.Show();
            }
            else
            {
                MessageBox.Show("Check your username and password");
            }
}
else
{
                frmMain objFrmMain = new frmMain();
                this.Hide();
                objFrmMain.Show();
}

字符串

rqqzpn5f

rqqzpn5f3#

一种方法是将会话令牌存储为application settings变量,可以在运行时检查该变量。如何生成它将取决于应用程序的范围(服务器端身份验证或本地检查)。

相关问题