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

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

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

HTTPにおけるCookieとは、クライアントのウェブブラウザ上に保存された一時的なデータを指します。クライアント側のJavaScriptでも、サーバー側のHTTPヘッダーでもクッキーの読み書き・修正・削除が可能です。

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

Q&A

解決済

1回答

2165閲覧

iPhoneだけsetcookieでcookieを登録できない

kkk_k

総合スコア15

Cookie

HTTPにおけるCookieとは、クライアントのウェブブラウザ上に保存された一時的なデータを指します。クライアント側のJavaScriptでも、サーバー側のHTTPヘッダーでもクッキーの読み書き・修正・削除が可能です。

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

0グッド

0クリップ

投稿2021/05/09 04:23

毎度お世話になります。
どうしても解決しないことがあり、質問を投稿いたします。

##現状
現在、お店のサイトの「会員ログイン」機能を作っている最中です。
フォームに「メールアドレス」と「パスワード」を入力し、ログイン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)側の変更があったのでしょうか。
調べても解決しなかったため書き込みをさせていただきました。

どなたかお分かりになる方、ご教示よろしくお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

現時点の詳しい事調べていませんが、サードパーティーCookieを完全にブロックって去年くらいになった様な記憶が。。。
strageでは駄目ですか?sessionとかlocalとか?

投稿2021/05/09 08:28

yhasegawa55

総合スコア189

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

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

kkk_k

2021/05/09 10:07

ご回答に投稿くださりありがとうございます<(_ _)> iPhoneからローカル環境でアクセスしてもNULLになりますね。 PC(Mac)でローカルでやる時はcookieちゃんと登録されます。 Cookieに関するニュース、少し調べてみたのですが、これでしょうか。https://japanese.engadget.com/jp-2020-03-24-safari-13-1-cookie.html
yhasegawa55

2021/05/09 10:22

iOSだったかなぁ~ごめんなさいうる覚えだったので当時どうしてそうしたか詳しく覚えてないのですが、確かそれくらいタイミングでcookie関係すべてLocalStarageに切り替えたような覚えがあります。 従い、Session管理を止めました cookieが必須ならごめんなさいそれほど深堀の情報は持っていません
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問