如何让用户在 windows phone 应用程序中保持登录状态?

How keep user logged-in in a windows phone app?

我正在使用 C# 开发 windows 10 通用应用程序,我使用 PHP 和 MySQL 来验证、存储数据并向用户显示数据。

因此,在登录过程中,我将用户电子邮件和密码发送到 PHP 文件,然后我将数据与存储在数据库中的数据进行比较,并将答案(成功或失败)发送到应用程序。

现在我有一个问题,我想知道如何让用户在关闭应用程序并重新打开后或者即使他们重新启动 phone 或他们的 PC 后仍保持登录状态?

我搜索了这个主题,据我所知,我需要在用户机器上存储一些数据,并在用户重新打开应用程序时检查这些数据,但我不明白我该怎么做或存储在哪里数据 !我可以直接在 C# 中执行此操作吗(Microsoft 是否有任何 API)或者我需要一个 3d 派对库或...?

你的假设是正确的。您必须在本地存储有关用户是否登录的信息。为此,您可以使用本地设置 属性。这些类似于 android 工作室中的 shared-preferences。主要思想是在本地存储 key-value 对。在您的情况下,您的密钥将是一些您将用于恢复数据的字符串,您的值可以是一个布尔变量,用于存储用户是否登录。每次打开应用程序时,您将首先恢复布尔值并检查用户是否已登录等等...这只是关于如何使用此概念的建议,但由于您没有提供任何代码,我不能扩展它并使用您自己的代码为您提供适当的示例。您可以在此处阅读有关如何使用 LocalSettings 的信息:

https://msdn.microsoft.com/en-us/library/windows/apps/xaml/windows.storage.applicationdata.localsettings?cs-save-lang=1&cs-lang=csharp#code-snippet-2

您可以使用 ApplicationData.Current.LocalSettings 来存储和获取值。

我更喜欢序列化对象并存储序列化的字符串,因为通过这种方式您还可以存储复杂类型。但是你也可以跳过我序列化的部分,只在这里添加你的布尔值。

下面是一些通用代码:

    public void Set<T>(string key, T value)
    {
        string serialized = JsonConvert.SerializeObject(value);
        var settings = ApplicationData.Current.LocalSettings.Values;
        if (!settings.Keys.Contains(key))
        {
            settings.Add(key, serialized);
        }
        else
        {
            settings[key] = serialized;
        }
    }

    private bool TryGet<T>(string key, out T result)
    {
        var settings = ApplicationData.Current.LocalSettings.Values;
        if (!settings.Keys.Contains(key))
        {
            result = default(T);
            return false;
        }
        var value = settings[key] as string;

        try
        {
            result = JsonConvert.DeserializeObject(value, typeof(T));
            return true;
        }
        catch
        {
            result = default(T);
            return false;
        }
    }