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

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

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

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

Q&A

解決済

2回答

4135閲覧

php  クッキーへの格納が、すぐに反映されない

valval

総合スコア43

PHP

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

0グッド

0クリップ

投稿2020/07/17 13:39

お世話になります

page1.phpとpage2.phpは同じフォルダに存在し、
page1.phpは

php

1<?php 2 setcookie('keyname','keyvalue', time()+10000,'/'); 3 4echo <<<EOM 5 <!DOCTYPE html><html lang="ja"><head><meta charset="utf-8"> <title></title> 6 7 </head> 8 <body> 9 10 cookie keyvalue={$_COOKIE['keyname']} 11<br><br> 12 <a href="page2.php">次</a> 13 </body></html> 14 15EOM; 16?>

page2.phpは

php

1<?php 2 setcookie('keyname',"", time()-10000,'/'); 3echo <<<EOM 4 <!DOCTYPE html><html lang="ja"><head><meta charset="utf-8"> <title></title> 5 6 </head> 7 <body> 8 9 cookie keyvalue={$_COOKIE['keyname']} 10<br><br> 11 <a href="page1.php">前</a> 12 </body></html> 13 14EOM; 15?>

としました。

page1でkeynameというクッキーにkeyvalueという文字列を入れ、page2でクッキーを削除し、
それぞれのページでそれぞれの処理結果を

cookie keyvalue={$_COOKIE['keyname']}

という形で表示させました。

すると、page1で処理結果が

cookie keyvalue=

となり、page1内のリンク遷移先のpage2で処理結果に

cookie keyvalue=keyvalue

となっています。

page2内のリンクでpage1へ戻っても、上記の通りの結果でした。

setcookieの格納の結果がすぐに反映されず、遷移後に反映されるのは不可解です。

phpのバージョンは7.2です。

どうすれば、すぐに反映されますか。

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

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

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

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

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

guest

回答2

0

ベストアンサー

setcookieの格納の結果がすぐに反映されず、遷移後に反映されるのは不可解です。

仕様です。

setcookie

一度クッキーが送信されると、次のページのロードからは $_COOKIE 配列によってクッキーにアクセスできます。

とあるように次回のページロード時に $_COKKIE に反映されます。

$_COKKIE は、php 実行開始時にHTTPヘッダより受け取った cookie の内容なので、setcookie を実行したら即時に $_COKKIE の内容が変わるわけではありません。

投稿2020/07/17 22:52

CHERRY

総合スコア25218

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

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

valval

2020/07/17 23:01

ありがとうございます
guest

0

ちょっと何をしたいかわかりません。
毎回cookieを消す処理をしていますよね?
すぐに反映とかページ遷移で引き継ぎとかそれ以前の話に見えますが

投稿2020/07/17 17:19

yambejp

総合スコア116724

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

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

valval

2020/07/17 22:38 編集

ご連絡をありがとうございます。 page1.phpでクッキーの格納と、格納した内容の表示 page2.phpで、page1.phpで格納したクッキーの削除と、削除された空のクッキーの確認 を行いたいのです。 実際の挙動は、 page1.phpで、削除された空のクッキー page2.phpで、削除前のクッキー が表示されております。 仰るとおり、それ以前の話だと思いますし、私には何らかの誤解が混じっているようですが、それが何なのか、わからないです。 私は、setcookie関数を行った次の行から、行ったことで格納された内容が$_COOKIE連想配列に反映されると思っていましたが、実際はいかがでしょうか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問