无法使XBAP cookie工作

时间:2015-05-03 18:32:14

标签: session cookies xbap

我正在尝试使用登录功能使XBAP应用程序与Web服务进行通信。 但是如果用户已经在过去七天内登录,我希望用户跳过登录步骤。 我使用html / aspx工作了。 但它在XBAP上不断失败。

在调试时,应用程序将获得完全信任。

这是我到目前为止编写cookie的代码:

    protected static void WriteToCookie(
        string pName,
        Dictionary<string, string> pData,
        int pExiresInDays)
    {
        // Set the cookie value.
        string data = "";
        foreach (string key in pData.Keys)
        {
            data += String.Format("{0}={1};", key, pData[key]);
        }
        string expires = "expires=" + DateTime.Now.AddDays(pExiresInDays).ToUniversalTime().ToString("r");
        data += expires;

        try
        {
            Application.SetCookie(new Uri(pName), data);
        }
        catch (Exception ex)
        {
        }
    }

这就是我必须阅读的内容:

    protected static Dictionary<string, string> ReadFromCookie(
        string pName)
    {
        Dictionary<string, string> data = new Dictionary<string, string>();
        try
        {
            string myCookie = Application.GetCookie(new Uri(pName));

            // Returns the cookie information.
            if (String.IsNullOrEmpty(myCookie) == false)
            {
                string[] splitted = myCookie.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries);
                string[] sub;
                foreach(string split in splitted)
                {
                    sub = split.Split(new char[] { ':' }, StringSplitOptions.RemoveEmptyEntries);
                    if (sub[0] == "expires")
                    {
                        continue;
                    }
                    data.Add(sub[0], sub[1]);
                }
            }
        }
        catch(Exception ex)
        {

        }
        return data;
    }

pName设置为:

string uri = "http://MyWebSiteName.com";

当用户第一次进行身份验证时,我调用WriteToCookie函数并将其设置为7天到期。 看起来一切都很好,因为我没有错误消息的例外。 (我在捕获中有一个突破点)

之后,我关闭会话并再次启动它。 我做的第一件事是ReadFromCookie。 然后我收到以下消息的异常:没有更多数据可用 所以我的应用程序将用户自动发送回登录屏幕。

我也尝试在同一会话中的WriteToCookie之后立即执行ReadFromCookie,我也得到了同样的错误。

Application.SetCookie(new Uri("http://MyWebSiteName.com/WpfBrowserApplication1.xbap"), "Hellllo");
string myCookie2 = Application.GetCookie(new Uri("http://MyWebSiteName.com/WpfBrowserApplication1.xbap"));

在我看来,cookie甚至不是首先写的。 所以我猜我做错了什么。 也许我使用的uri是错误的。是否需要特定的格式? 就像你需要一个特定的过期日期格式。

我一直在搜索相当多的互联网,以获得关于在XBAP中使用cookie的好样本/教程,而且我找不到任何真正记录或测试的内容。 很多人说它有效,但没有真正的样品可供尝试。 很多人也在html中处理身份验证,然后在成功读取/写入cookie后转到XBAP。 如果可能的话,我更喜欢完整的XBAP解决方案。

在询问之前回答一些问题,以下是项目设置:

  • 调试:
    • 命令行参数:-debug -debugSecurityZoneURL http://MyWebSiteName.com“C:\ Work \ MyWebSiteName \ MyWebSiteNameXBAP \ bin \ Debug \ MyWebSiteNameXBAP.xbap”
  • 安全性:
    • 启用ClickOnce安全设置(已选中)
    • 这是一个完全信任的应用程序(已选择)

我还创建了一个证书,并添加了3个商店,如"publisher cannot be verified" message displayed中所述 所以我不再有警告弹出窗口了。我只是想确保它不是权限问题。

1 个答案:

答案 0 :(得分:1)

终于找到了这个问题的答案。

感谢您CodeProject我终于能够从XBAP代码中编写/读取cookie。 正如我猜测的那样,URI需要非常具体,你无法传递你想要的一切。

诀窍使用了什么: BrowserInteropHelper.Source

最后,读/写代码如下:

Application.SetCookie(BrowserInteropHelper.Source, data);

string myCookie = Application.GetCookie(BrowserInteropHelper.Source);

看起来你不能使用&#39;;&#39;分离您自己的数据。 如果您这样做,您将只获得数据中的第一个条目。 使用不同的分隔符(例如:&#39;:&#39;)然后您可以取回所有内容 数据如下所示:

  

n =某事:k = somethingElse; expires =星期二,2015年5月12日14:18:56 GMT;

我唯一没有从Application.GetCookie回来的是过期日期。 不确定它是否正常。也许它出于某种原因会自动刷新。如果有人知道为什么,我会很感激地发表评论来启发我。

至少现在我可以在XBAP中读取/写入数据到cookie。呀!