C # Войти детальное хранилище - PullRequest
1 голос
/ 18 января 2011

У меня есть эта форма входа в мою программу на C #, я буду сопоставлять имя пользователя и пароль в базе данных моего сайта, затем, когда я получу ответ, который говорит «истина», он будет хранить данные пользователя внутри программы, я неЕсли вы хотите использовать внешний файл для хранения данных, можно ли встраивать данные пользователя в программу.

как только пользователь снова использует программу, он проверит, сохраняются ли данные пользователя.встроенный в программу, которая затем будет держать пользователя «залогиненным».

У меня есть ощущение, что встроенные ресурсы нельзя редактировать в реальном времени.

Какой лучший способ сохранить имя пользователя / пароль для использования в будущем?

Ответы [ 2 ]

3 голосов
/ 18 января 2011

Хм, да, вы можете сохранить «cookie», который я бы использовал для «пользовательских данных», которые вы описываете внутри вашего приложения (кстати, я думаю, что другой термин для «cookie» - это «билет аутентификации»).".)

Однако обычно пользователь не имеет права изменять исполняемый файл, на котором он работает.И во фреймворке есть отличная поддержка для хранения информации вне приложения ...

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

Скажем, у вас есть строка, представляющая данные, которые вы хотите сохранить, называемое состояние (вы можете сериализовать сериализуемый класс в строку.) Вы можете сохранить его так:

private static IsolatedStorageFile _isoStore =
                    IsolatedStorageFile.GetStore(IsolatedStorageScope.User | IsolatedStorageScope.Assembly, null, null);
String state = "my Secret String";
            using (IsolatedStorageFileStream oStream =
                    new IsolatedStorageFileStream(C_CREDENTIALS_FILENAME, 
                                                    FileMode.Create, 
                                                    _isoStore))
            {
                Byte[] stateBytes = Encoding.Unicode.GetBytes(state);
                Byte[] encryptedBytes = ProtectedData.Protect(stateBytes, 
                                                                null, 
                                                                DataProtectionScope.CurrentUser);
                oStream.Write(encryptedBytes, 0, encryptedBytes.Length);

C_CREDENTIAL_FILENAME - это имя файла, в котором вы хотите сохранить информацию. Чтобы вернуть ее, попробуйте что-то вроде этого:

string[] fileNames = _isoStore.GetFileNames(C_CREDENTIALS_FILENAME);
            if (fileNames.Any(item => item == C_CREDENTIALS_FILENAME))
            {
                //it exists
                using (IsolatedStorageFileStream iStream =
                    new IsolatedStorageFileStream(C_CREDENTIALS_FILENAME, FileMode.Open, _isoStore))
                {
                    Byte[] unEncryptedBytes = ProtectedData.Unprotect(iStream.ToArray(),
                                                null,
                                                DataProtectionScope.CurrentUser);
                    String unEncryptedXml = Encoding.Unicode.GetString(unEncryptedBytes);
                                    }
            }
            else
            { 
                //it doesn't exist
                return null;
            }
        }
0 голосов
/ 18 января 2011

IIRC, работающий исполняемый файл не может быть изменен в Windows, поэтому вы не можете редактировать «встроенные» данные.

Есть пара альтернатив, чтобы назвать пару из головы:

  • Защищенное хранилище
  • Системный реестр
  • Файл App.settings
...