【问题标题】:Not able to set domain in document.cookie in Phonegap iOS?无法在 Phonegap iOS 的 document.cookie 中设置域?
【发布时间】:2013-12-11 07:17:31
【问题描述】:

在 phonegap iOS 构建中,当我使用带有域的 document.cookie 设置 cookie 来存储会话值时,我无法做到。

当我检索时它给了我空的 cookie。您能否指导我如何在 Phonegap iOS 应用程序中使用域设置 cookie。

当我尝试设置没有域的 cookie 时,它​​工作正常。但是我的请求将在没有域的情况下失败。 我使用了下面的代码。

document.cookie = "SESSION=" + SESSION +"; path=/; domain=.facebook.com";

but when i try below code its working.

document.cookie = "SMSESSION=" + SMSESSION +"; path=/;";

但如果没有会话,我的应用程序将失败。

还尝试了 document.domain,它破坏了我的 javascript 代码。

【问题讨论】:

标签: javascript ios cordova session-cookies


【解决方案1】:

请查看以下网址

Where cookie is managed in phonegap app with jquery?

您必须在 appdelegate.m 中设置以下代码

NSHTTPCookieStorage *cookieStorage = [NSHTTPCookieStorage 
                                  sharedHTTPCookieStorage]; 
[cookieStorage setCookieAcceptPolicy:NSHTTPCookieAcceptPolicyAlways]; 

在电话间隙

var request =   {
            url: my_server_url,
            success: function(response, status, request) {
                var header = request.getAllResponseHeaders();
                var match = header.match(/(Set-Cookie|set-cookie): (.+?);/);
                if(match)
                    my_saved_cookie = match[2];
            },
            }

if(my_saved_cookie)
request.headers = { Cookie: my_saved_cookie };

$.ajax(request);

希望对你有帮助

【讨论】:

  • 这与检索它无关。问题是我的应用程序无法使用域设置 cookie。
  • 你能告诉我确切的要求吗?为什么要为 facebook 设置 cookie?
  • 它不仅仅适用于 Facebook。而不是我的实际域,我使用了 facebook。它可以是任何域。我想在 phonegap iOS 应用程序中使用 javascript 在 cookie 中设置会话值和域。
  • 我个人建议不要那样做。只需通过 facebook/twitter 等登录做一件事。获取他们的 id,将该 id 和 domail 存储在 localStorage 中,并以这种方式维护您的功能。因为它在 phonegap 应用程序中创建了 cookie 问题。
  • 如果我错了,请纠正我。如果您存储 cookie,并且当我们提出请求时,cookie 值会被自动获取。此功能已在同一应用程序的桌面版本中实现,并且工作正常。现在我正在使用 Phonegap 将桌面版本迁移到 iPad。
【解决方案2】:

这就是我解决问题的方法。为了设置 cookie,我创建了 phonegap 插件并使用了本地 http 客户端。通过本机客户端设置 cookie 和域后,使用 javascript 的普通 http 客户端工作正常。

用于设置 cookie 的 iOS phonegap 插件代码。

NSDictionary *cookieProperties = [NSDictionary dictionaryWithObjectsAndKeys:
                              @".domain.com", NSHTTPCookieDomain,
                              @"/", NSHTTPCookiePath,
                              @"SESSION", NSHTTPCookieName,
                              @"Session value",NSHTTPCookieValue,nil];
NSDictionary *cookieProperties1 = [NSDictionary dictionaryWithObjectsAndKeys:
                              @".domain.com", NSHTTPCookieDomain,
                              @"/", NSHTTPCookiePath,
                              @"some cookie", NSHTTPCookieName,
                              @"some cookie value",NSHTTPCookieValue,nil];

NSHTTPCookie *cookie1 = [NSHTTPCookie cookieWithProperties:cookieProperties1];
NSHTTPCookie *cookie = [NSHTTPCookie cookieWithProperties:cookieProperties];
NSArray* cookieArray = [NSArray arrayWithObjects: cookie,cookie1, nil];
[[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookies:cookieArray forURL:[NSURL   URLWithString:urlString] mainDocumentURL:nil];

在 cookie 存储中设置 cookie 后创建 NSURLConnection 并执行同步或异步请求。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-10
    • 1970-01-01
    • 2012-12-03
    • 1970-01-01
    • 1970-01-01
    • 2015-06-28
    • 2012-10-23
    • 1970-01-01
    相关资源
    最近更新 更多