2012-01-09 85 views
2

我在幾天前開始在c#中編程,所以我是一個總的新手。根據我在其他語言的經驗,我發現它有點「簡單」。本地存儲「記住我」的信息c#(總新手)

我正在構建一個系統,用戶登錄到我的應用程序,該應用程序正在工作。我想要有一個「記住我」 - 設置信息在本地存儲的位置。做這個的最好方式是什麼?我只會保存用戶名和密碼哈希。

編輯:這是一個桌面應用程序。登錄信息被髮送到一個PHP腳本簡單地使用HttpWebRequest

+4

WinForms? ASP.NET? – Shai 2012-01-09 08:19:09

+0

不知道這意味着什麼......我正在使用Visual Studio 2010與Win7。信息提交給php文件 – OptimusCrime 2012-01-09 08:20:40

+0

你如何「提交」信息? – Shai 2012-01-09 08:21:55

回答

4

您可以使用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"]; 
+1

小心:顯然,請勿對用戶的密碼執行此操作。通常情況下,您會從網站收到令牌並存儲該令牌。儘管從安全角度來看,這仍然是一個狡猾的地方。 – 2012-01-09 08:42:38

+0

@NeilBarnwell:在存儲密碼之前,我對密碼進行了哈希處理?安全性在應用程序中並不是什麼大問題。這更像是一個噱頭,因爲我想學習它。但一個令牌也可以工作:) – OptimusCrime 2012-01-09 08:51:23

+0

問題是,不管你是否哈希它,有人可以竊取整個文件,並將它原樣複製到自己的機器上假裝他們是別人。您可以通過從環境中獲取某些東西來剔除散列值來消除這種情況。這與瀏覽器cookies基本上可能存在同樣的問題,所以我想調查瀏覽器如何解決這些問題值得一看。 – 2012-01-09 09:04:49

0

如果您使用ASP .NET中,可以設置身份驗證cookie,當你在用戶通過第二個參數記錄

FormsAuthentication.SetAuthCookie(model.UserName, true); 

二參數將cookie設置爲您的請求並製作「Remeber Me」選項。

+0

這是否適用於桌面應用程序?我的申請有點不清楚。 – OptimusCrime 2012-01-09 08:27:51

0

保存的信息什麼我下站在你的問題是,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並將其存儲在數據庫中。