iOS应用程序中不保留PHP会话ID

时间:2014-09-26 08:32:05

标签: php ios objective-c session

目前我的iOS应用程序是从使用PHP + MYSQL通过JSON构建的服务器检索数据,然后在我的PHP中我试图回显session_id()。我的应用正在使用NSURLConnection sendAsynchronousRequest与PHP进行通信。

我尝试过3次请求相同的网址,返回的会话ID将具有不同的值,我在PHP中也包含了session_start()

但是如果我在浏览器中运行URL,无论我运行多少次,会话ID都将始终相同。

这是我的iOS请求代码:

NSString *newURL = @"http://www.example.com/index.php?value=getData"];
NSURLRequest *urlRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:newURL]];
[NSURLConnection sendAsynchronousRequest:urlRequest queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error){
            if ([data length] >0 && error == nil){
                NSDictionary *myDict = [NSJSONSerialization
                                                JSONObjectWithData:data
                                                options:kNilOptions
                                                error:&error];
                NSLog(@"%@", myDict);
            }
        }];

请帮忙。感谢。

2 个答案:

答案 0 :(得分:2)

我在这里遇到了类似的问题(在网页浏览中)。

尝试在PHP文件中增加会话Cookie的生命周期。

// Start session
session_start(); 

// Extend cookie life time by an amount of your liking
$lifetimecookie = 30 * 24 * 60 * 60; // A month 
setcookie(session_name(),session_id(),time()+$lifetimecookie);

答案 1 :(得分:0)

您必须了解PHP如何在会话服务器端保持会话。这是通过将cookie发送回客户端(PHPSESSID)来完成的。然后,随着您的浏览器的每个新请求,此cookie将被发送回服务器。

但是,您不是使用浏览器而是使用连接对象。您需要在客户端保留返回的会话ID,并在每次新请求时将其发送回服务器。这是通过标题完成的。来自服务器的响应将包含Set-Cookie,您需要使用Cookie标头发送会话ID cookie。