2012-01-09 5 views
2

私は数日前にC#でプログラミングを始めました。他の言語での私の経験に基づいて、私はそれをやや単純なものにしました。"remember me"という情報をローカルに保存するC#(new newbeginner)

ユーザーが自分のアプリケーションにログインしているシステムを構築しています。これは動作しています。私は、情報をローカルに保存する場所を設定する「私を覚えている」ようにしたい。これを行う最善の方法は何ですか?ユーザー名とパスワードハッシュのみを保存します。

編集:これはデスクトップアプリケーションです。ログイン情報は、PHPスクリプトは、単にあなたがASP .NETを使用している場合は、二番目のパラメータによって、ユーザーにログインしているとき、あなたは認証Cookieを設定することができHttpWebRequest

+4

WinForms? ASP.NET? – Shai

+0

その意味がわかりません...私はWin7でVisual Studio 2010を使用しています。情報はPHPファイル – OptimusCrime

+0

に提出されますどのように情報を提出しますか? – Shai

答えて

4

ConfigurationManagerクラスを使用すると、アプリケーションの設定を管理できます。

あなたが設定ファイルに新しいキーを追加するには、この機能を使用することができます

:アプリケーションが起動したら、次のことができ

setSetting("username", usernameTextBox.Text); 

(例えば)

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; 
} 

して、ユーザー名を保存します以前に保存した情報をお読みくださいConfigurationManager

usernameTextBox.Text = ConfigurationManager.AppSettings["username"]; 
+1

注意:明らかに、ユーザーのパスワードでこれを行わないでください。通常、ウェブサイトからトークンを受け取り、そのトークンを保存します。しかし、これはまだセキュリティ上の観点からは面倒だ。 –

+0

@NeilBarnwell:パスワードを保存する前にそれをハッシュしますか?セキュリティはアプリケーションに大きな影響を与えるものではありません。私はそれを学びたいので、ギミックのようなものです。しかし、トークンもうまくいくでしょう:) – OptimusCrime

+0

問題は、それをハッシュするかどうかに関係なく、誰かがファイル全体を盗み、それを自分のマシンにそのままコピーして、誰かであるとふりをすることができるということです。ハッシュされた値を環境から取り除いたものでソルトすることで、これをやや排除できます。基本的にはブラウザのクッキーと同じ問題ですから、ブラウザがどのようにこれらの問題に取り組んでいるかを調べることは価値があります。 –

0

を使用して送信され

FormsAuthentication.SetAuthCookie(model.UserName, true); 

セカンドパラメータはあなたの要求にクッキーを設定し、 "Remeber Me"オプションを作成します。

+0

これはデスクトップアプリケーションでも機能しますか?私は私のアプリケーションでは少し不明でした。 – OptimusCrime

0

あなたは

here's what you will do.

はそれを暗号化することを忘れないでくださいC#でアプリケーション設定を作成することができます。

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は認証クッキーの名前です。唯一の欠点は、アプリケーションが存在するときに辞書に格納されたすべてのクッキーがなくなることです。解決策は、私が覚えていれば、クッキーをシリアル化してデータベースに保存することです。

関連する問題