我在幾天前開始在c#中編程,所以我是一個總的新手。根據我在其他語言的經驗,我發現它有點「簡單」。本地存儲「記住我」的信息c#(總新手)
我正在構建一個系統,用戶登錄到我的應用程序,該應用程序正在工作。我想要有一個「記住我」 - 設置信息在本地存儲的位置。做這個的最好方式是什麼?我只會保存用戶名和密碼哈希。
編輯:這是一個桌面應用程序。登錄信息被髮送到一個PHP腳本簡單地使用HttpWebRequest
我在幾天前開始在c#中編程,所以我是一個總的新手。根據我在其他語言的經驗,我發現它有點「簡單」。本地存儲「記住我」的信息c#(總新手)
我正在構建一個系統,用戶登錄到我的應用程序,該應用程序正在工作。我想要有一個「記住我」 - 設置信息在本地存儲的位置。做這個的最好方式是什麼?我只會保存用戶名和密碼哈希。
編輯:這是一個桌面應用程序。登錄信息被髮送到一個PHP腳本簡單地使用HttpWebRequest
您可以使用ConfigurationManager類來管理您的應用程序的設置。
您可以使用此功能將新的密鑰添加到您的配置文件:
public bool setSetting(string pstrKey, string pstrValue)
{
Configuration objConfigFile =
ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
bool blnKeyExists = false;
foreach (string strKey in objConfigFile.AppSettings.Settings.AllKeys)
{
if (strKey == pstrKey)
{
blnKeyExists = true;
objConfigFile.AppSettings.Settings[pstrKey].Value = pstrValue;
break;
}
}
if (!blnKeyExists)
{
objConfigFile.AppSettings.Settings.Add(pstrKey, pstrValue);
}
objConfigFile.Save(ConfigurationSaveMode.Modified);
ConfigurationManager.RefreshSection("appSettings");
return true;
}
,然後保存您的用戶名(例如)
setSetting("username", usernameTextBox.Text);
一旦應用程序啓動時,你可以讀你剛纔從您ConfigurationManager
usernameTextBox.Text = ConfigurationManager.AppSettings["username"];
小心:顯然,請勿對用戶的密碼執行此操作。通常情況下,您會從網站收到令牌並存儲該令牌。儘管從安全角度來看,這仍然是一個狡猾的地方。 – 2012-01-09 08:42:38
@NeilBarnwell:在存儲密碼之前,我對密碼進行了哈希處理?安全性在應用程序中並不是什麼大問題。這更像是一個噱頭,因爲我想學習它。但一個令牌也可以工作:) – OptimusCrime 2012-01-09 08:51:23
問題是,不管你是否哈希它,有人可以竊取整個文件,並將它原樣複製到自己的機器上假裝他們是別人。您可以通過從環境中獲取某些東西來剔除散列值來消除這種情況。這與瀏覽器cookies基本上可能存在同樣的問題,所以我想調查瀏覽器如何解決這些問題值得一看。 – 2012-01-09 09:04:49
如果您使用ASP .NET中,可以設置身份驗證cookie,當你在用戶通過第二個參數記錄
FormsAuthentication.SetAuthCookie(model.UserName, true);
二參數將cookie設置爲您的請求並製作「Remeber Me」選項。
這是否適用於桌面應用程序?我的申請有點不清楚。 – OptimusCrime 2012-01-09 08:27:51
保存的信息什麼我下站在你的問題是,PHP文件是服務器和客戶端使用Windows窗體。你正在做某種類型的HTML報廢,並在你的勝利形式中顯示結果HTML。如果這是你在做什麼的,然後
//1. Create a dictionary to store cookie collection
public static Dictionary<string, Cookie> CookieCollection { get; set; }
//2. Store cookie in that collection
foreach (Cookie clientcookie in response.Cookies)
{
if (!CookieCollection.ContainsKey("AuthCookieName"))
CookieCollection .Add(userName, clientcookie);
else
CookieCollection ["userName"] = clientcookie;
}
//3. If remember me is clicked then send the same while creating request
request.CookieContainer.Add(request.RequestUri,
new Cookie("AuthCookieName", CookieCollection ["userName"]));
哪裏AuthCookieName是身份驗證cookie的名稱。唯一的缺點是當應用程序存在時,存儲在字典中的所有cookie都將消失。如果記住我被檢查,解決方案可能會序列化cookie並將其存儲在數據庫中。
WinForms? ASP.NET? – Shai 2012-01-09 08:19:09
不知道這意味着什麼......我正在使用Visual Studio 2010與Win7。信息提交給php文件 – OptimusCrime 2012-01-09 08:20:40
你如何「提交」信息? – Shai 2012-01-09 08:21:55