【问题标题】:Network requests and responses are stay in the memory网络请求和响应都留在内存中
【发布时间】:2015-06-05 00:06:33
【问题描述】:

我使用 AFNetworking 作为我的基本网络课程。当我在越狱手机上进行内存转储时,我可以很容易地在转储文件中以纯文本形式查看请求 url 或响应(如 json 对象)。我检查了xcode中的泄漏工具,并没有基于此的内存泄漏。我的应用在 url 或响应中有敏感数据(如用户名、电子邮件地址......),我想在连接完成后立即清除这些信息。

我尝试在应用中禁用 NSURLCache:

NSURLCache *sharedCache = [[NSURLCache alloc] initWithMemoryCapacity:0
                                                        diskCapacity:0
                                                        diskPath:nil];
[NSURLCache setSharedURLCache:sharedCache];

我也试过了:

[[NSURLCache sharedURLCache] removeAllCachedResponses];

[[NSURLCache sharedURLCache] removeCachedResponseForRequest:NSURLRequest];

但这些都不起作用。 有人知道怎么做吗?

【问题讨论】:

  • 如果您正在执行内存转储,您将看到已释放的 Foundation 对象的剩余部分,因为它们不会在释放时擦除内存,因此它们会一直保留到内存被重新使用为止。除了一些如何不使用 Foundation 类型之外,没有真正的通用解决方案。 Apple 不提供NSStringNSData 的安全版本。提交请求安全 Foundation 对象的错误报告:bugreporter.apple.com
  • 您应该考虑使用AFHTTPSessionManager 并在临时会话中使用initWithSessionConfiguration。请参阅 NSURLSessionConfiguration 文档中的 ephemeralSessionConfiguration 参考。
  • 您为什么关心用户是否可以在越狱设备上看到自己的信息?他们选择破坏设备的安全性。

标签: ios objective-c afnetworking memory-dump


【解决方案1】:

你试过了吗?

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager.requestSerializer setCachePolicy:NSURLRequestReloadIgnoringLocalCacheData];

您还需要从服务器端脚本的标头响应中禁用缓存。如果是 PHP:

<?php
header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
?>

Apple 非常尊重响应标头。

【讨论】:

  • 感谢您的回复。不幸的是,它对我不起作用。
猜你喜欢
  • 1970-01-01
  • 2016-11-01
  • 2021-12-28
  • 1970-01-01
  • 1970-01-01
  • 2018-08-01
  • 2021-10-26
  • 1970-01-01
  • 2021-12-26
相关资源
最近更新 更多