大家好! 我遇到了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=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 - DAL 和 BLL - 使用静态方法好吗?