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

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

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

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

PHP

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

Q&A

解決済

2回答

3345閲覧

PHPでcookieに連想配列を入れる方法

kannmuri

総合スコア42

Cookie

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

PHP

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

0グッド

0クリップ

投稿2019/06/23 02:28

編集2019/06/23 02:59

すみませんが、どなたかcookieで連想配列を扱う方法を教えていただけませんでしょうか?

下記のように書いても、文字列で"contents['id']"と登録されるだけです。

配列にはどうしたらいいでしょうか?

php

1$id = 1; 2$type = 'A'; 3setcookie("contents['id']", $id, time() + (365 * 24 * 60 * 60), '/'); 4setcookie("contents['type']", $type, time() + (365 * 24 * 60 * 60), '/'); 5

考えてることをちょっと追記します。

・「contents」という1つのクッキーの値として「id、type」を入れたいというのが目的です。

・「idがtype」のどっちかだけ更新したい。みたいなケースもあります。だから、1つのクッキーの値として保存しつつ、更新するときはその片方だけを更新する。みたいなウルトラCがあれば知りたいです。

すみませんが宜しくおねがい致します!

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

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

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

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

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

m.ts10806

2019/06/23 02:31

値ではなくキーに使いたいということでしょうか。
m.ts10806

2019/06/23 02:33

でも結局取り出すときに $contents = $_COOKIE["contents"]; echo $contents['id']; で取り出すのでは?
kannmuri

2019/06/23 02:40

値でなくキーに使いたい?というのはよくわかってませんが、まさにそうやって取り出せればといいなーと思ってます。「id、type」を「contents」の配列にまとめておいて、「red_id、red_type」を「red_contents」の配列にまとめたい。みたいな感じで考えてます。
m.ts10806

2019/06/23 02:45 編集

そうやって取り出すことになるので「提示したやり方でできるのでは?」という意味でコメントしたのですが、どこまで試されたのでしょうか? 別案を回答として投稿しましたが、質問に追記してください。
kannmuri

2019/06/23 02:48

保存するときに1つのクッキーとして保存したいって思ってたんですよね。試したのは質問のコードだけです。取り出すことはやってません。取り出す以前にそもそも1つのクッキーとして保存できなかったので。
guest

回答2

0

ベストアンサー

たぶんここまでする必要はないでしょうけど、いっそJSONにすると分かりやすくなるのではと。

php

1$contents = ["id"=>1,"type"=>'A']; 2setcookie("contents", json_encode($contents), time() + (365 * 24 * 60 * 60), '/');

で、取り出すときにjson_decode()

投稿2019/06/23 02:43

編集2019/06/23 02:44
m.ts10806

総合スコア80850

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

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

kannmuri

2019/06/23 02:46

おーなるなるです。「serialize」じゃなくて「json_encode」でもイケるってことですね!ありがとうございます。
m.ts10806

2019/06/23 02:47

考え方はhentaimanさんと同じです。配列を扱うならJSONにするのがやりやすいかなと思ったためです。
kannmuri

2019/06/23 02:55

だめでした。これだと全部「contents」が上書きされてしまい、「idだけ変えたい」とかができませんでした。うぎゃー難しい!
m.ts10806

2019/06/23 02:58

アドバイスをもとに何をしたのかと、本来を何をどうしたいのか具体的にされる必要があるかと。 現在の質問内容だとこれ以上アドバイス無理ですよ。
m.ts10806

2019/06/23 03:00

idだけ変えたいならjson_decodeで取り出した配列のidのキーだけ書き換えてsetcookieしなおせばいいだけとも思うのですが。
kannmuri

2019/06/23 03:01

ですよねw実際に質問内容は解決してますから、もう質問が悪くてすみませんって感じです。今ちょっと追記しました。昼飯食べてゆっくりして気が向いたらぜひまた教えてくださいませ!
kannmuri

2019/06/23 03:02

入れ違いでした。なるほど。なんとかできそうなんですね。ちょっとjsonなんとかを調べてみますわ。
hentaiman

2019/06/23 03:16

飽くまで取り出すキーとしてcontents['id']という書き方をしてそれのみを変更したいって事そういう処理を作るしかない。クッキーはただの文字列だからね
kannmuri

2019/06/23 03:23 編集

ありがとうございます。
kannmuri

2019/06/23 03:58

すみませんmts10806さん、いろいろ調べてはいるんですが、ご回答してもらったやつ、取り出すときにjson_decode() しても、最後var_dumpすると「null」になってしまうんですよね… $cookie = '%7B%22id%22%3A1%2C%22type%22%3A%22a%22%7D'; $decode = json_decode($cookie); var_dump($decode); // null になってしまう これどうやって取り出したらいいのでしょうか? 保存された値(下記$cookie)は、「json_encode($contents)」で保存されたもので、それに対して json_decode() して戻してるのに null って、おかしいですよね。
m.ts10806

2019/06/23 04:05

その文字列だとjson_decode前にurldecodeが必要かもしれませんね。nullになるのはjson形式として認識されてないためですね。
kannmuri

2019/06/23 04:10

なんとかここまでたどり着きました。 urlencodeしてからjson_decodeですね。 $cookie = '%7B%22id%22%3A1%2C%22type%22%3A%22a%22%7D'; $decode = json_decode( urldecode($cookie), true ); var_dump($decode); -- でも意味わからなくないですか?保存するときは json_encode() しかかけてないのに、なんで戻すときはjson_decodeだけじゃダメなのよ?ていう。 >その文字列だと 普通だったらこの文字列にはならないんですか?
m.ts10806

2019/06/23 04:25

Cookieの仕様と言える部分と思います。 http://www.tohoho-web.com/wwwcook.htm json_decodeは配列をjson形式の「文字列」に変換するものなのでCookieでそのまま使えない{["などが含まれます。そういった文字列が自動でCookieに扱えるようにurlencodeかけられるようですね。 なので、用途次第ですがhentaimanさんが提示されてるセッションの方が容量的にも使い勝手はいいと思いますよ。
hentaiman

2019/06/23 04:31

セッション利用はともかくとして、hentai回答はおかしいなら適当なエンコードしたらとも書いてあるので、ちゃんと回答見て調べてくれてるならコメントに書いてある問題も発生しないはずなんですけどねえ…
kannmuri

2019/06/23 04:31

ありがとうございますー。もう「調べ方」からわからないので、助かりました。納得なっとく。しゃーないですな。今回は読み込み時に送信したいデータなのでセッションじゃなくてクッキーにします。(セッションは自動で送信されないみたいなので) いろいろありがとでした!
kannmuri

2019/06/23 04:34 編集

hentaimanさんもありがとー!
guest

0

serializeしてcookieに保存して使う時はunserializeする
それだけだと動きがおかしいって時は保存前に適当なエンコードかけて取り出した時にはデコードする

クッキーである必要が無いならセッション使った方が良いけど

投稿2019/06/23 02:40

hentaiman

総合スコア6415

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

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

kannmuri

2019/06/23 02:45

どもどものありありです。やってみます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問