2012-01-09 1 views
2

Я начал программировать в C# в течение нескольких дней назад, поэтому я являюсь абсолютным новичком в этом. Основываясь на моем опыте на других языках, я нашел его несколько «простым».Хранение информации «запомнить меня» локально C# (total newbeginner)

Я создаю систему, в которой пользователи входят в мое приложение, которое работает. Я хочу иметь «помнить меня» - устанавливать, где информация хранится локально. Каков наилучший способ сделать это? Я сохраню только имя пользователя и пароль.

Редактировать: Это настольное приложение. Логин-информация отправляется к PHP-скрипт, просто используя HttpWebRequest

+4

WinForms? ASP.NET? – Shai

+0

Не уверен, что это значит ... Я использую Visual Studio 2010 с Win7. Информация передается в php-файл – OptimusCrime

+0

Как вы «отправляете» информацию? – Shai

ответ

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

ВНИМАНИЕ: Не делайте этого с паролями пользователей, хотя, очевидно. Как правило, вы получите токен с веб-сайта и сохраните его. Это все еще хитрая почва, хотя с точки зрения безопасности. –

+0

@NeilBarnwell: Что такое хэш-пароль перед его хранением? Безопасность не является огромной сделкой в ​​приложении. Это больше похоже на трюк, потому что я хочу его изучить. Но токен тоже мог бы работать :) – OptimusCrime

+0

Проблема в том, что независимо от того, хешь ли это, кто-то может украсть весь файл и скопировать его как есть на свою машину, чтобы притвориться, что они кто-то другой. Вы можете немного устранить это, замачивая хешированное значение чем-то, что взято из окружающей среды. Это в основном та же проблема, с которой вы можете столкнуться с куки-браузерами, поэтому я думаю, что исследование того, как браузеры справляются с этими проблемами, стоит посмотреть. –

0

Если вы используете ASP .NET, вы можете установить аутентификацию куки, когда вы вошли в систему пользователя по второму параметру

FormsAuthentication.SetAuthCookie(model.UserName, true); 

Второй Параметр устанавливает cookie в ваш запрос и делает опцию «Remeber Me».

+0

Это работает для настольных приложений? Я был немного неясен в своем заявлении. – OptimusCrime

0

Что я под стоять от вашего вопроса, php-файл - это сервер, а для клиента вы используете форму Windows. Вы делаете какой-то отбор HTML и отображаете результат HTML в своей win-форме. Если это то, что вы делаете, то

//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 и хранить его в базе данных, если помнить, что я проверен.