我正在xamarin中创建一个Android应用程序。我正在使用Web视图来显示网站。用户登录网站后创建一个cookie,并应存储在Web视图中。应用程序中有两个Web视图,一个Web视图显示页面,如果页面中有任何文本框,则在第二个Web视图中打开该页面。
所以现在当用户尝试登录时,会打开第二个Web视图(因为登录页面包含文本框),在用户输入详细信息并单击下一个按钮后,第二个视图将关闭,并在第一个Web视图中打开下一个页面。登录后,将创建cookie并将其存储在Web视图中,并在用户下次打开应用程序时不要求登录。这是应该发生的事情。
问题是,如果用户输入详细信息并单击下一个按钮(下一页正在第一个Web视图中加载)并立即退出应用程序,然后再次启动应用程序,则cookie不存在,应用程序再次要求登录。 / p>
登录后,我正在阅读webview页面完成事件的cookie值并以吐司形式显示。如果我在登录后退出应用程序,我会在吐司中获取cookie值但当我再次启动应用程序时,cookie不再存在并且它要求我再次登录
public override void OnPageFinished (WebView view, string url)
{
try
{
if (view.Url == Urls.URL_INDEX)
{
var cookieManager = CookieManager.Instance;
if (cookieManager != null)
{
//getcookie string from the url
string cookie = cookieManager.GetCookie (view.Url);
if (!string.IsNullOrEmpty (cookie))
{
string[] cookies = cookie.Split (';');
foreach (var newcookie in cookies)
{
if (newcookie.Trim().StartsWith (Constants.COOKIE_NAME))
{
string cookieValue = newcookie.Substring (newcookie.IndexOf ('='));
Toast.MakeText(activity,cookieValue,ToastLength.Short).Show();
}
}
}
}
}
}
catch (Exception ex)
{
Console.WriteLine ("Exception in storing cookie in Home Activity : "+ex.Message);
Toast.MakeText (activity, "Exception : " + ex.Message,ToastLength.Long).Show();
}
}
我不知道为什么会这样,请帮忙。
答案 0 :(得分:2)
Cookie存储在RAM中以获得最佳性能,并且每隔五分钟就会同步到永久存储器。您需要手动强制 $.ajax({
type: "POST",
url: urlServer + "ws_alerts.asmx/ActualizarAlerta",
data: '{' +
'"id":' + id +
',"revision":"' + rev +
'","purpose":"' + pur +
'","change":"' + change +
'","op":' + op + '}',
dataType: "json",
contentType: "application/json",
timeout: 60000,
error: function (xhr) {
bootbox.alert("Ocurrio un error al procesar la peticion.");
},
success: function (data) {
bootbox.alert(data.d);
}
});
以CookieSyncManager
方式同步Cookie,以便在您再次启动应用程序时它们仍然可用。有关详细信息,请参阅CookieSyncManager documentation。