首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使XBAP cookie工作

无法使XBAP cookie工作
EN

Stack Overflow用户
提问于 2015-05-03 18:32:13
回答 1查看 342关注 0票数 3

我正在尝试制作一个XBAP应用程序,通过登录与webservice进行通信。但我希望用户跳过登录步骤,如果他们已经在过去七天登录。我用html/aspx让它工作。但是它在XBAP中持续失败。

调试时,应用程序被赋予完全信任。

到目前为止,我编写cookie的代码如下:

代码语言:javascript
复制
    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)
        {
        }
    }

这就是我要读的饼干:

代码语言:javascript
复制
    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设置为:

代码语言:javascript
复制
string uri = "http://MyWebSiteName.com";

当用户第一次进行身份验证时,我调用WriteToCookie函数并将其设置为7天到期。看起来一切都很好,因为我得到的错误信息也不例外。(我抓到了一个断点)

在此之后,我将结束会话并重新启动它。我做的第一件事就是一个ReadFromCookie。然后,我得到了以下消息的异常:没有更多的数据可用,所以我的应用程序将自动将用户发送回登录屏幕。

我还试图在同一会话的ReadFromCookie之后执行WriteToCookie,并得到相同的错误。

代码语言:javascript
复制
Application.SetCookie(new Uri("http://MyWebSiteName.com/WpfBrowserApplication1.xbap"), "Hellllo");
string myCookie2 = Application.GetCookie(new Uri("http://MyWebSiteName.com/WpfBrowserApplication1.xbap"));

在我看来,饼干一开始都没有写好。所以我猜我做错了什么。也许我用的uri是错的。是否需要一种特定的格式?就像您需要一个非常特定的格式的到期日期。

我在互联网上搜索了很多关于使用XBAP的cookies的示例/教程,但是我找不到任何文档和测试都很好的东西。很多人说它有效,但没有真正的样本来尝试。很多人也在html中处理身份验证,然后在成功阅读/编写cookie之后转到XBAP。如果可能的话,我更喜欢一个完整的XBAP解决方案。

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

  • 调试:
    • 命令行参数:-debug -debugSecurityZoneURL http://MyWebSiteName.com http://MyWebSiteName.com

  • 安全性:
    • 启用ClickOnce安全设置(选中)
    • 这是一个完全信任的应用程序(选中)

我还创建了一个证书,并添加了像在显示“发布者无法验证”消息中解释的3家商店,这样我就不再有警告弹出了。我只是想确保这不是许可问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-05 14:21:21

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

感谢这个CodeProject,我终于能够从XBAP代码中编写/读取cookies了。正如我已经猜到的,URI需要非常具体,并且不能传递您想要的所有内容。

诀窍是什么:BrowserInteropHelper.Source

最后,读/写代码看起来如下:

代码语言:javascript
复制
Application.SetCookie(BrowserInteropHelper.Source, data);

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

看起来,您无法使用“;”来分隔您自己的数据。如果这样做,您将只获得数据中的第一个条目。使用不同的分隔符(例如:':'),然后可以将所有数据返回如下所示:

n=something:k=somethingElse;expires=Tue,2015年5月12日,14:18:56格林尼治标准时间;

我唯一没有从Application.GetCookie得到的是到期日期。不确定这是否正常。也许是因为某种原因自动冲了出来。如果有人知道为什么,我希望有一个意见,以启发我。

至少现在我可以将数据读写到XBAP中的cookie中。嗯!

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30017765

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档