質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

0回答

1610閲覧

WKWebViewにCookieを設定する

TakoyakiDrift

総合スコア10

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2019/03/06 03:49

編集2022/01/12 10:55

前提・実現したいこと

初めて利用させて頂くので不慣れな箇所等あると思いますがお許しください。
またSwiftを触り始めて2ヶ月ほどですので、間違いなどあると思いますがご容赦ください。

アプリ側でログインしてCookieをレスポンスで受け取り、HTTPCookieStorageに保存しています。
下記に記載している資料を元に、WKWebViewにCookieを仕込み、WebView内の画面遷移でセッションを維持させたいのですが、維持できません。
WebViewの画面に遷移した際に、CookieがAPI側に渡っている為、ユーザー名などは確認できているのですが、その最初にWebViewに表示されるページ内のリンクをタップすると
Cookieが消えて(?)しまいます。
var_dumpでCookieを表示させた際に、最初のアクセス時はCookieが画面に表示されているのですが、リンク先の画面ではCookieが空になっていました。
そこでWKWebView内にCookieを仕込んで、WebView内の画面遷移に対応させることができると言う事を知り、資料を見て、試みたのですが、うまく次の画面にCookieが渡せていません。
おかしい点や修正点がありましたらご教授いただければすごく嬉しいです。

発生している問題・エラーメッセージ

Swift

1import UIKit 2import WebKit 3 4class WebScreenViewController: UIViewController, WKNavigationDelegate, WKUIDelegate { 5 6 7 var urlString: String = "http://localhost/admin/top" 8 9 10 let cookies = HTTPCookieStorage.shared.cookies 11 //LoginAPIでレスポンスされたCookieを取得 [ PHPSESSID ] 12 let phpSessId = HTTPCookieStorage.shared.cookies![0].value 13 14 15 var webView: WKWebView! 16 17 override func viewDidLoad() { 18 super.viewDidLoad() 19 setWkWebView() 20 self.wkWebViewLoad(url: self.urlString) 21 setActivityIndicate() 22 self.webView.uiDelegate = self 23 } 24 25 func wkWebViewLoad(url: String) { 26 if let url = NSURL(string: url) { 27 let request = NSMutableURLRequest(url: url as URL, cachePolicy: NSURLRequest.CachePolicy.useProtocolCachePolicy, timeoutInterval: 10.0) 28 request.httpShouldHandleCookies = false 29 request.setValue("PHPSESSID=(self.phpSessId)",forHTTPHeaderField: "Cookie") 30 self.webView.load(request as URLRequest) 31 } 32 } 33 34 func setWkWebView() { 35 let userContentController = WKUserContentController() 36 let cookieScript = WKUserScript(source: "document.cookie = 'PHPSESSID=(self.phpSessId);';", injectionTime: .atDocumentStart, forMainFrameOnly: true) 37 userContentController.addUserScript(cookieScript) 38 let wkWebViewConfig = WKWebViewConfiguration() 39 wkWebViewConfig.userContentController = userContentController 40 self.webView = WKWebView(frame: CGRect(x: 0, y: 0, width: self.view.frame.size.width, height: self.view.frame.size.height)) 41 self.webView.navigationDelegate = self 42 self.view.addSubview(self.webView) 43 } 44}

参考にした資料

WKWebViewでのSessionの共有
ログイン認証したあとに、WKWebViewでCookieを使ってセッションを保つ方法

補足情報(FW/ツールのバージョンなど)

Swift 4.2
xcode 10.1

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問