毎度お世話になります。
どうしても解決しないことがあり、質問を投稿いたします。
##現状
現在、お店のサイトの「会員ログイン」機能を作っている最中です。
フォームに「メールアドレス」と「パスワード」を入力し、ログインbuttonでログインするシンプルなものです。
##実装したいこと
ログインフォームの中に、「ログインしたままにする」というcheckboxを用意して、
checkboxがcheckedだった場合は、cookieとDBの「auto_login」というテーブルに情報を保存するようにしています。
SESSIONが切れても、cookie情報があれば、DBの「auto_login」からユーザー情報をSELECTして自動的にログインできる仕組みです。
##困っていること
var_dump($_COOKIE);で確認すると、PC(win_Mac)及びAndroidではcookieに情報が保存されますが、iPhoneではNULLになりcookie情報がありません。iPhoneにおけるChromeもSafariも両方ともNULLとなります。
PC(win/Mac),Android,iPhoneすべてにおいて、DBへのINSERTはできます。
javascriptの「navigator.cookieEnabled」を使用してcookieが有効になっているか確認し、「有効」となっているにもかかわらず「NULL」になります。
##現在のコード
変数名やURLなど一部分は掲載用に変えていますが、下記の通り記載します。
ログイン時のコードです。
php
1session_start(); 2 3//DB接続 4$pdo = connectDb(); 5 6$site_url = 'https://example.com'; 7 8$user_email = h($_POST['user_email']); 9$user_password = hash('sha256', h($_POST['user_password'])); 10$auto_login = $_POST['auto_login']; 11 12//DBに、入力されたuser情報があるか確認 13$sql = "SELECT * FROM customer_list WHERE user_email = :user_email AND user_password = :user_password"; 14$stmt = $pdo->prepare($sql); 15$stmt->bindValue(':user_email', $user_email); 16$stmt->bindValue(':user_password', $user_password); 17$stmt->execute(); 18$user = $stmt1->fetch(PDO::FETCH_ASSOC); 19 20//user情報がDBと合致したら 21if($user !== false){ 22 $_SESSION['USER'] = $user; 23 24 //自動ログイン関連--------------------- 25 // 自動ログイン情報を一度クリアする。 26 if (isset($_COOKIE['AUTOLOGIN'])) { 27 $auto_login_key = $_COOKIE['AUTOLOGIN']; 28 // Cookie情報をクリア 29 setcookie('AUTOLOGIN', '', time()-86400, @site_url); 30 // DB情報をクリア 31 $sql = "DELETE FROM auto_login WHERE c_key = :c_key"; 32 $stmt = $pdo->prepare($sql); 33 $stmt->execute(array(":c_key" => $auto_login_key)); 34 } 35 // 自動ログインを希望の場合はCookieとDBに情報を登録する。 36 if ($auto_login === 'true') { 37 // 自動ログインキーを生成 38 $auto_login_key = sha1(uniqid(mt_rand(), true)); 39 $expire = date('Y-m-d H:i:s', time()+3600*24*365); 40 // Cookie登録処理 41 setcookie('AUTOLOGIN', $auto_login_key, time()+3600*24*365, $site_url); 42 // DB登録処理 43 $sql = "INSERT INTO auto_login 44 (`user_id`, `c_key`, `expire`, `created_at`, `updated_at`) 45 VALUES 46 (:user_id, :c_key, :expire, now(), now())"; 47 $stmt = $pdo->prepare($sql); 48 $stmt->bindValue(':user_id', $user['id']); 49 $stmt->bindValue(':c_key', $auto_login_key); 50 $stmt->bindValue(':expire', $expire); 51 $stmt->execute(); 52 } 53}
iPhoneでもcookieを使うには、何か特別な記述が必要なのでしょうか...?
それとも最近のiPhone(Apple)側の変更があったのでしょうか。
調べても解決しなかったため書き込みをさせていただきました。
どなたかお分かりになる方、ご教示よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/05/09 10:07
2021/05/09 10:22