大家好! 我遇到了C#winform的重登陆问题。就是说,如果一个用户登陆了后,就不能再次登录。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大家好! 我遇到了C#winform的重登陆问题。就是说,如果一个用户登陆了后,就不能再次登录。相关的知识,希望对你有一定的参考价值。

我想在数据库表中设置一个int标识字段login,如果登录了login=1,未登录login=0。那么我在登录时怎么去获取这个login字段呢?
希望有高手指点一下。能给出这段代码最好
谢谢
string sql = "select * from tb1_Operator where nOperatorId=@nOperatorId and szPassword=@szPassword";
SqlCommand cmd = new SqlCommand(sql, conn);
cmd.Parameters.AddWithValue("nOperatorId", username);

cmd.Parameters.AddWithValue("@szPassword", pwd);
object obj = cmd.ExecuteScalar();
if (obj == null)


MessageBox.Show("用户名或密码不正确!", "温馨提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
return;
这是我验证登录名和密码的代码。如果要同时验证login字段,把代码添加在哪里?请指点。谢谢!

你可以给你的用户表,添加一个字段,登陆login状态。
然后你在登陆按钮事件中,你可以加上login来判断
就像你所说:
如果登录了login=1,未登录login=0
你每次登陆,每一个用户登陆就记录下它的状态
那么你登陆的时候,根据你输入的loginId用户名即可判断
参考技术A 呵呵,下面的代码就可以实现,Program.cs文件里,Mutex类提供了这个功能,不用数据库的!
using System;
using System.Threading;
using System.Collections.Generic;
using System.Windows.Forms;
using System.Configuration;

namespace LR

static class Program

//声明程序为互斥体
static Mutex mutex = new Mutex(false, "ThisShouldOnlyRunOnce");

/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()

bool Running = !mutex.WaitOne(0, false);

if (Running == true)

MessageBox.Show("程序已经启动!");
return;

Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());



哈哈!问题理解错了!我这个是解决客户端重复启动的问题的!惭愧!
参考技术B 可以在验证登录时,一起取出来,再次登录时使用。当异地登录时,可以利用ado.net从数据库中取值使用追问

string sql = "select * from tb1_Operator where nOperatorId=@nOperatorId and szPassword=@szPassword";
SqlCommand cmd = new SqlCommand(sql, conn);
cmd.Parameters.AddWithValue("nOperatorId", username);
cmd.Parameters.AddWithValue("@szPassword", pwd);
这里写不完,加到补充里了,请你再看一下

追答

cmd.ExecuteScalar();返回的是第一行的第一列,你到底这时候取的是什么啊?
你就在object obj!=null的时候验证嘛,obj!=null证明你的用户名和密码是正确的吧,在这个时候判断啊,判断如果login=0,表示还没有登录,这时候修改login=1;如果login=1,修改login=0。这样不行吗?这样是异地登录,如果只是一个地方判断是否已经登录,那你就直接在代码中定义一个静态变量就可以了

追问

我明白了。还有一个问题是我怎么在 object obj!=null是怎样把login的值从数据库取出来呢?你能给出代码吗?谢谢!

参考技术C 可以在在下面加个 else if 判断 login 是否==1

遇到无效的重定向。缺少位置标题。团结问题

我使用Unity WWWForm将许可证验证请求发布到URL。代码在Unity 5.6中有效,但它在Unity 2017.3.1f1中不起作用。我也在Unity 2018中尝试了这个。它没有用。

这是错误消息:遇到无效重定向(缺少位置标题?)

这是我正在使用的代码。

void Awake() {
    Instance = this;
    WWWForm form = new WWWForm ();
    mainHeader = form.headers;

    mainHeader ["Authorization"] = "Basic " + System.Convert.ToBase64String (System.Text.Encoding.ASCII.GetBytes ("dummyId:#dummyPassword"));

}


public void HitForLicence(){
    string jsonData = JsonUtility.ToJson (new LicenseData { 

        LICENCE_KEY="kwsnfdksfksnf",
        MACHINE_IP="192.168.1.1"

    });




    Debug.Log (jsonData);

    byte[ ] postData = System.Text.Encoding.ASCII.GetBytes (jsonData);


    //headers ["Authorization"] = "Basic " + System.Convert.ToBase64String (System.Text.Encoding.ASCII.GetBytes ("unity:@piun!ty"));
    if (mainHeader.ContainsKey ("Content-Type")) {

        mainHeader ["Content-Type"] = "application/json";

    } else {

        mainHeader.Add ("Content-Type", "application/json");
    }


    WWW www = new WWW (LicenseURL, postData, mainHeader);
    StartCoroutine (CheckForLicense (www));

}

public IEnumerator CheckForLicense (WWW www)
{

    Debug.Log("Check For License..");


    yield return www;


    //if (www.isDone ) {
        if (www.error != null) {
            ClearKeyBox ();
            print (www.error);
        }
        else {
            print (www.text);
            jsonNode = SimpleJSON.JSON.Parse(www.text);
            print ("MSG "+ jsonNode["MSG"].ToString());
        }
    //} 


    if (jsonNode != null && jsonNode["MSG"].Equals(ValidStr)) {
        HandleTextFile.WriteString(_SystemMACAddress+"-"+keyEntered);
        // Next screen
    } else {
        ClearKeyBox ();
    }

}

以前有人面对这个吗?请帮忙。

答案

我在Unity 2018下也遇到过WWW的问题。

目前我正在使用UnityWebRequest - 我认为WWW已经过时,但我找不到任何参考。

基本上改变你的代码如下:

...

    UnityWebRequest www = UnityWebRequest.Post(LicenseURL, form)
    StartCoroutine (CheckForLicense (www));

}

public IEnumerator CheckForLicense (WWW www)
{

    Debug.Log("Check For License..");

...

我想你必须通过SetRequestHeader设置头部并将你的帖子数据放入WWWForm ...

我现在无法检查它...希望它有所帮助!

另一答案

就像dome12b所说的那样,改为UnityWebRequest。

但是,另外,将chunked transfer设置为false。我有同样的问题,它让我疯了。分块转移修复了所有。

UnityWebRequest www = UnityWebRequest.Post(LicenseURL, form)
www.chunkedTransfer = false;
另一答案

这最终解决了我的问题。

public void Post(string url)
{
    ServicePointManager.ServerCertificateValidationCallback =
        delegate(object s, X509Certificate certificate,
                 X509Chain chain, SslPolicyErrors sslPolicyErrors)
    { 
        return true; 
    };


    string jsonData = JsonUtility.ToJson (new LicenseData { 

        LICENCE_KEY="kwsnfdksfksnf",
        MACHINE_IP="192.168.1.1"

    });


    Debug.Log (jsonData);

    byte[ ] postData = System.Text.Encoding.ASCII.GetBytes (jsonData);



    if (mainHeader.ContainsKey ("Content-Type")) {

        mainHeader ["Content-Type"] = "application/json";

    } else {

        mainHeader.Add ("Content-Type", "application/json");
    }
    StartCoroutine (HttpRequest(postData, url));
}





IEnumerator HttpRequest(byte[] postData, string url)
{
    var httpWebRequest = (HttpWebRequest)WebRequest.Create(url);
    httpWebRequest.ContentType = "application/json";
    httpWebRequest.Method = "POST";
    httpWebRequest.AllowAutoRedirect = false;
    using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
    {
        string jsonData = JsonUtility.ToJson(new LicenseData
            {
                LICENCE_KEY = "kwsnfdksfksnf",
                MACHINE_IP = "192.168.1.1"
            });

        streamWriter.Write(jsonData);
        streamWriter.Flush();
        streamWriter.Close();
    }

    var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
    using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
    {
        var result = streamReader.ReadToEnd();
        print(result);
    }
    yield return null;
}

以上是关于大家好! 我遇到了C#winform的重登陆问题。就是说,如果一个用户登陆了后,就不能再次登录。的主要内容,如果未能解决你的问题,请参考以下文章

c#winform 关于页面大小与控件大小的问题

C# Winform - DAL 和 BLL - 使用静态方法好吗?

grails spring security ui登录有时会出现奇怪的重定向

有关C#winform的调用外部程序的问题

我用c#winform操作文本文件遇到了问题

如何在Visual Studio中发布编写好的Winform程序