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

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

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

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

JavaScript

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

Q&A

解決済

3回答

3082閲覧

cookieで検索履歴を実装したい。

melmelme

総合スコア38

Cookie

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

JavaScript

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

0グッド

0クリップ

投稿2019/04/09 05:20

Cookieを用いて検索履歴を実装したいと思ったのですが、マルチバイトを扱っているからかある程度の段階で
nginXから「400 BadRequest Cookie is Large」というエラーが表示されてしまいます。
何か対策が無いか探しているのですが有効な文献が見つからず...ご教授いただけましたら幸いです。

jsのcookieを扱うライブラリとしては、「js.cookie.js」というものを使用しています。
http://illbenet.jp/view/51

①フォームから検索されたタイミングで、Javascriptでcookieに検索文字を配列で格納

Javascript

1$(function() { 2 $(".form").submit(function() { 3 var AAAAAA_query_btm = $(".form input[name='AAAAAA']").val(); 4 var BBBBBB_query_btm = $(".form input[name='BBBBBB']").val(); 5 6 if (fw_query_btm != "" || area_query != "") { 7 var timeStamp = new Date(); 8 var getyear = String(timeStamp.getFullYear()); 9 var getMonth = String(timeStamp.getMonth() + 1); 10 var getDate = String(timeStamp.getDate()); 11 var getHours = String(timeStamp.getHours()); 12 var getMinutes = String(timeStamp.getMinutes()); 13 var getSecond = String(timeStamp.getSeconds()); 14 var timeStamp = getyear + getMonth + getDate + getHours + getMinutes + getSecond; 15 16 Cookies.set('searchHistories[' + timeStamp + ']', { 17 displayString: AAAAAA_query_btm + "&fw|area&" + BBBBBB_query_btm, 18 }, { 19 expires: 7 20 }); 21 } 22 }); 23});

②「ああああああああ」「いいいいいいいいい」
等、マルチバイトで検索すると、200バイト程どんどん溜まっていき、8000バイト程いったタイミング(サーバーによると思います)で400 BadRequest Cookie is Large が出現

という状態です。
お手数をお掛けいたしますがご教示いただけましたら幸いです。
どうぞよろしくお願いいたします。

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

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

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

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

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

guest

回答3

0

Cookieはサーバに送信されるので、検索履歴を持ちたいだけなら localStorage にするほうがよいと思います。
(サーバに送る必要があるなら別途Ajaxを併用すればよいと思います)

【Window.localStorage - Web API | MDN】
https://developer.mozilla.org/ja/docs/Web/API/Window/localStorage

【Web Storage API を使用する - Web API | MDN】
https://developer.mozilla.org/ja/docs/Web/API/Web_Storage_API/Using_the_Web_Storage_API

投稿2019/04/09 05:40

kei344

総合スコア69407

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

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

0

ベストアンサー

容量については他の回答者の方と同意見です。

Cookieはこの用途に向いていません。
SafariではITP 2.1からCookieストレージとしての利用法を制限していて、7日で削除される機能が追加されました。

(一応)無理やり保存するなら、encodeURIComponentなどが使えるかと思います。

この用途だとlocalStorageかIndexedDBですね。
前者のほうが簡単です。

投稿2019/04/30 20:21

otolab

総合スコア765

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

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

0

Cookieには上限があり、結構少ないです。

「検索履歴」のように1日に何度も入力が発生して際限なしにたまっていく情報の保存には向いていません。
せめてWebStorageのLocalStorage(容量についてまとめ)か、データベースに保存されたほうが良いと思います。

投稿2019/04/09 05:41

m.ts10806

総合スコア80850

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問