问题 使用jquery在phonegap应用程序中管理cookie的位置?


我的原生iphone应用程序,使用带jquery的phonegap(基于浏览器)开发,可以登录到Web服务器,登录后用户可以访问他们的资源。一旦用户通过身份验证,服务器就会在cookie中设置会话ID。

我对这个方案没有任何问题,但我想知道cookie存储在哪里,因为当我做警报(document.cookie)时,它返回空字符串。

是否有可能jquery中的ajax函数在内部管理cookie并将其发送到同一域的每个请求?


5153
2018-02-26 00:50


起源

看来iphone沙盒浏览器环境适合每个移动应用。我想这可能就是原因。 - katsuya


答案:


如果您希望自己的应用程序自动管理cookie,请将其添加到appDelegate.m文件中:

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

如果您想自己管理会话信息,可以执行以下所有ajax请求:

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,直到我发现第一种方法。


14
2018-04-28 03:58



第一种方法在我的iOS5模拟器上不起作用,看起来像Apple改变了行为。第二种方法工作正常。 - Chris
这适用于ajax请求。但是,应该如何处理图像和其他资源。 - gviswanathan
@Chris:这个方法适用于iOS5,确保你在正确的文件中添加代码。 - Felipe Brahm
@gviswanathan:第一种方法应该适用于任何请求AFAIK - Felipe Brahm
但是getAllResponseHeaders()方法至少在Chrome中没有检索Set-Cookie - Ferex