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

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

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

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

2回答

204閲覧

JavaScriptで送信しない値にCOOKIEは使いますか?

parinpurin23

総合スコア20

JavaScript

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

0クリップ

投稿2020/03/20 00:38

編集2020/03/20 03:33

ユーザーがチェック中の項目やアクションの状態を今まで何でもかんでもCOOKIEに保存していましたが、これってひょっとして、送信しないのなら変数に持たせておくべきものですか?

COOKIEか変数か、使い分けはどのようにすべきでしょうか?

※以下、質問の経緯を補足します

これまで値の保存はいつもCOOKIEを使っていたのですが、今回IE以外ではPJAXを使用しており、その際にCOOKIEをやめて変数に保存してみましたところ特に不具合なさそうに見えました。これなら値の保存はCOOKIEではなく変数でもいいのではないかと疑問に思ったものの、何か問題起こらないかと不安を覚え、この度の質問に至りました。

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

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

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

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

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

guest

回答2

0

ベストアンサー

送信しないのなら変数に持たせておくべきものですか?

Cookie に値を保存すると、サーバに送信されるという以外にブラウザの永続域に保存されるという効果もあります。
ブラウザでリロードすると、javascript の変数はすべて初期化されますが、Cookie の値は残ります。
Cookie に値を保存することで「ユーザーがチェック中の項目やアクションの状態」など編集中の内容がリロードですべてリセットされるのを防ぐことができます。

しかし、Cookie にはサイズの制限があるので、注意が必要です。
参考: 最新ブラウザのクッキーの制限(数,サイズ)を調べてみた
また、サーバに送信されるので、通信に不要な負荷をかけることもデメリットの一つとなります。
このため、最近ではブラウザの永続域に保存したい場合は Cookie ではなく、 html5 の localstorageや sessionstorage を使うのが一般的です。
参考: ブラウザにデータを保存するlocalStorage(ローカルストレージ)の使い方

COOKIEか変数か、使い分けはどのようにすべきでしょうか?

上記の通り、リロードなどを超えて編集内容を復帰したいとき場合は Cookie に保存するのも良いかと思います。

ただし、永続的に値が保存されていることはいろいろなセキュリティ上の脆弱性の原因となります。
ユーザがログアウトボタンを信用してブラウザを閉じずに他のユーザと共有するようなケース(いまどき、少ないとは思います)では、前の人が編集中の内容が見えてしまうかもしれません。 Cookie にしろ localStorage にしろ、そこは注意が必要です。
また、悪意のあるスクリプトに cookie の値を盗まれないように外部のjavascript をロードしないようにするなどの注意が必要です。

投稿2020/03/20 04:05

編集2020/03/20 04:14
mit0223

総合スコア3401

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

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

0

画面間共有しないのであればCOOKIEに持つメリットはほぼありません。
グローバル変数で十分です。

投稿2020/03/20 00:46

m.ts10806

総合スコア80850

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

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

parinpurin23

2020/03/20 01:59

アドバイスありがとうございます。すみません、画面間共有とはどのような操作ですか?すべてのページでPJAXを使って遷移(IE以外)しているのですが、これも画面間共有でしょうか?
m.ts10806

2020/03/20 02:47

>すべてのページでPJAXを使って 前提条件がクリティカルすぎます。 質問本文に追記してください。 というか、目の前に動作するコードがあるのですから試しては? また、「COOKIEの使いどころ、メリット」は調べれば出てくることかと思いますが、どこまで調べて、試しましたか?
parinpurin23

2020/03/20 03:05

試した結果特に変数でも不具合はないのですが、不安になったので質問しました。あとCOOKIEのメリットは値が送信されることという認識で、今回はそれが活かせないから使う必要ないのではと思って質問したんですけど、何か…お気に障りましたか?
m.ts10806

2020/03/20 03:15

いえ、前提条件や背景など質問者さんだけが持っている情報が多ければ多いほどお互い何度もやりとりしなければならず、時間を浪費するだけになることを指摘しています。 質問内容は充実していれば充実しているほど的確なアドバイスが得られ、迅速な解決に繋がります。 書いてある内容が回答者の全てですから。どんな熟練者でも赤の他人の要件を正しくくみ取るのは不可能ですよ。
parinpurin23

2020/03/20 03:29

たしかに仰る通りで、「PJAXの場合なら変数でも平気かと思ったから質問した」という旨を記載しておくべきでした。お時間の浪費申し訳ございませんでした。
m.ts10806

2020/03/20 04:15

質問は編集できますので適宜ご対応いただければと。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問