Sou*_*Das 6 cookies ios cordova ionic-framework
我在离子iOS应用程序中面临一个问题,我的网站没有保存cookie,清除缓存和清除会话缓存不起作用.我正在使用Cordova Inappbrowser插件.
在Android中,它运行得很好.
var ref = window.open(url, '_blank','location=no,toolbar=yes,clearcache=no,clearsessioncache=no');
Run Code Online (Sandbox Code Playgroud)
但是,在iOS中,它无法正常工作.什么时候,我首先提供我的凭据,然后进入应用程序然后我退出应用程序并重新打开它,它再次要求我的凭据(在ANDROID中完美运行)
进一步挖掘后,我发现要保存的cookie标记为isSessionOnly = true且expires = null.
因此,我可以在会话中看到cookie,但在应用程序关闭时会被清除
我通过在CDVinAppbrowser.m类中编写以下代码找到了我的结果:
- (void)openInInAppBrowser:(NSURL*)url withOptions:(NSString*)options
{
NSHTTPCookie *cookie;
NSHTTPCookieStorage *cookieJar = [NSHTTPCookieStorage sharedHTTPCookieStorage];
for (cookie in [cookieJar cookies]) {
NSLog(@"%@", cookie);
}
Run Code Online (Sandbox Code Playgroud)
那么,如何在iOS中保存cookie或使用clearcache = no和clearsessioncache = no的选项保存inappbrowser.
注意:我对iOS/Swift完全不熟悉.所以,我需要知道将代码放在swift类中的哪个位置.
编辑赏金(由AndroidMechanic提供)
我有完全相同的问题,它适用于android完美无缺,但在iOS上它每次应用程序重新启动时都会要求提供凭据.我正在为可以避免本机代码的解决方案提供赏金.
@AndroidMechanic,我发布了这个问题,这就是我们解决它的方法。
我们发现 iOS inappbrowser webview 不能正确处理 cookies,但 android 的 webview 可以。我们的应用程序的初始登录过程是通过我们的身份提供商(在我们的例子中是 ADFS)。身份提供者是通过 SAML 配置的(通过 Cookie 工作)。
解决方案 1:(确保 Cookie 只要有效就可以工作)
因此,我们使用了 cordova 插件 cookiemperor,在成功登录后保存 cookie,并在任何人再次登录时将其传递给 URL。这一直有效,直到 cookie 没有过期。
但是,我们需要一个更好的解决方案来解决这个问题,即解决方案 2。
解决方案2:(不要使用Cookie,使用Access Token)
我们将身份验证从 SAML 更改为 OAuth2.0 授权代码流协议,其中我们使用访问令牌和刷新令牌来验证用户的身份。
因此,每当登录控制器被触发时,它都会在调用 URL 之前检查以下内容:
A) Check if any access token is present
B) If present, whether it is expired or not.
C) If expired, use the refresh token to get the new access token.
Run Code Online (Sandbox Code Playgroud)
如果上述任何条件失败,我们将调用用户必须再次登录的 URL,否则用户可以在 iOS 和 Android 中使用 SSO 功能,而不必担心 cookie。
谢谢
苏拉夫
| 归档时间: |
|
| 查看次数: |
1833 次 |
| 最近记录: |