我正在尝试使用登录功能使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解决方案。
在询问之前回答一些问题,以下是项目设置:
我还创建了一个证书,并添加了3个商店,如"publisher cannot be verified" message displayed中所述 所以我不再有警告弹出窗口了。我只是想确保它不是权限问题。
答案 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。呀!