ホームページ > ウェブフロントエンド > jsチュートリアル > JavaScriptのCookieを処理する方法

JavaScriptのCookieを処理する方法

尊渡假赌尊渡假赌尊渡假赌
リリース: 2025-02-25 18:30:11
オリジナル
972 人が閲覧しました

How to Deal with Cookies in JavaScript

長年にわたり、多くのWeb開発者はクライアント側にデータを保存する必要があります。 HTML5とその新しいメカニズムが登場する前に、すべての開発者は cookieを使用してこの目標を達成しました。残念ながら、JavaScriptでCookieを使用すると、多くのトラブルが発生する可能性があります。この記事では、Cookieとは何か、Cookieを作成、取得、削除する機能を構築する方法について説明します。

キーポイント

  • Cookieは、Webサイトから送信され、ユーザーのブラウザによってローカルに保存されているデータの断片です。 HTTPはステートレスであるため、ユーザーアクティビティを追跡するために使用されます。ただし、Cookieは最大4kbのデータしか保存できず、各HTTP要求がサーバーに送信され、ネットワーク帯域幅を消費できます。
  • HTML5の結果として、Cookieの代替品が登場しました。これらには、WebストレージAPI(ストレージ名valueペア)とWeb SQLデータベースAPI(SQLバリアントを使用してクエリをかけることができるデータベースのストレージデータ)が含まれます。もう1つの選択肢は、単純な値と階層オブジェクトを保持するレコードを含むデータベースを定義するインデックスデータベースAPIです。
  • javaScriptはdocument.cookie属性を使用して、Cookieを作成、取得、削除できます。ただし、JavaScriptでCookieを処理することは、ネイティブの方法がないために困難な場合があります。開発者は通常、Cookieを管理するために独自の機能を作成する必要があります。
  • Cookieには、セミコロン分離されたキー価値ペアで構成される単純な構造があり、キーと値は等しい符号で区切られています。それらはオプションで有効期限を持つことができ、有効期限後に削除されます。有効期限が提供されていない場合、セッションまたはブラウザが閉じるまでCookieは続きます。また、Cookieに読み書きできるドメインとパスを指定することもできます。

クッキーとは何ですか?

Cookieは、Webサイトから送信され、ユーザーのブラウザによってローカルに保存されるデータです。 httpがstateless であるため、Cookieが必要です。これは、HTTP自体がユーザーの以前のアクティビティを追跡できないことを意味します。 Cookieを使用することは、状態を作成する方法です。

クッキーを使用していますか?

今、ほとんどすべてのWebサイトがCookieを使用しています。ただし、Cookieは最大4kbのデータしか保存できないため、非常に限られています。さらに、多くの開発者は、CookieがHTTP要求を要求するたびにサーバーに送信されるため、大型Cookieがパフォーマンスに影響を与える多くのネットワーク帯域幅を消費すると主張しています。 Remy Sharpは、HTML5を紹介する共著の本で、Cookieに対する別の重要な批判をしました。これは、モバイル接続にとって悲惨なものになる可能性があります。覚えておくべきもう1つの重要なことは、ヨーロッパの訪問者がいる場合、あなたのウェブサイトは2012年5月26日のEU電子プライバシー指令に準拠する必要があるということです。これを聞いたことがない場合は、今ヨーロッパであなたのウェブサイトが違法な理由をチェックしてください。近年、人々はCookieの代替品を見つけようとしています。 HTML5の出現により、いくつかの新しいテクノロジーが登場しています。 1つ目は、Name-Valueペアを保存する方法を備えたWebストレージAPIです。 WebストレージAPIの概要については、WebストレージAPIの概要を読むことをお勧めします。 2番目の選択肢は、SQLバリアントを使用して照会できるデータベースにデータを保存するWeb SQLデータベースAPIです。 Web SQLはよくサポートされていますが、この標準は積極的に維持されなくなりました。最後になりましたが、インデックスデータベースAPIは、単純な値と階層オブジェクトを保持するレコードを含むデータベースを定義します。 indexedDBの詳細については、「HTML5 IndexEdDBの詳細な学習」をご覧ください。残念ながら、indexedDBは広くサポートされていないため、おそらく頼るべきではありません。どんな方法でも、知っておくべき重要なポイントがいくつかあります。これらのAPIはすべてCookieと同様のローカルストレージを提供しますが、データをサーバーに送り返しません。したがって、ほとんどの場合、CookieとストレージAPIの1つの両方を使用します。技術的には、AJAXを使用して同じ効果を達成できますが、これによりタスクを過度に複雑にし、追加のコードが必要です。

クッキーの作り方

クッキーの構造は非常にシンプルです。キー価値のペアがいくつかあります。ペアはセミコロンで分離され、等記号文字はキーをその値から分離します。 Cookieは有効期限があるように選択でき、有効期限後に削除されます。有効期限が提供されていない場合、セッションまたはブラウザが閉じるまでCookieは続きます。有効期限を過去に設定すると、ブラウザはCookieを削除します。日付の形式はUTC/GMTでなければならないため重要であることに注意してください。さらに、Cookieを読み書きできるドメインとパスを指定できます。デフォルトでは、パス値は「/」です。つまり、Cookieは特定のドメイン内のすべてのパスに表示されます。ドメインを指定しない場合、Cookieが設定されているページに属します。このデータの設定方法も重要です。順序は次のとおりです。次の例は、ドメインのすべてのパスでアクセスできるCookieと、キー価値ペアが1つだけであることを示しています。

<code>visits=3; path=/;</code>
ログイン後にコピー
ログイン後にコピー

次の例は、ドメインのすべてのパス(デフォルトIS)でアクセス可能なCookieにアクセスできることを示しており、2012年10月31日の午前11:00に期限切れになります。

<code>last-visit=Mon, 15 Oct 2012 19:36:00 GMT; expires=Wed, 31 Oct 2012 11:00:00 GMT;</code>
ログイン後にコピー
ログイン後にコピー

スクリプトcookies

これまでのところ、私はCookieとは何か、そして彼らの長所と短所のいくつかを説明しました。次に、JavaScriptがどの関数がそれらを処理するかを確認する時が来ました。残念ながら、私が言いたい最初のことは、JavaScriptには簡単なクッキーを処理するためのネイティブな方法がないということです。 javaScriptは、属性を使用してCookieを作成、取得、削除できますが、これは満足のいくものではありません。あなたがdocument.cookiesplit()、およびループに対処する必要があるたびに。 substring()を文字列変数と考えることはできますが、実際には文字列変数以上のものであることに注意してください。たとえば、次のスクリプトを参照してください document.cookie

<code>visits=3; path=/;</code>
ログイン後にコピー
ログイン後にコピー
を印刷すると、以下に示すように予期しない結果が得られます。

document.cookieこれまでのところ、JavaScriptでCookieを処理することの難しさを見てきました。だから今こそ、簡単に管理するために独自の関数を作成する時です。次の機能は、Cookieを作成するのに役立ちます。

パラメーターは、日付オブジェクトのインスタンスまたは日数を表す数値であることに注意してください。後者は負の数になる可能性があり、これにより有効期限が過去に設定されます。
<code>last-visit=Mon, 15 Oct 2012 19:36:00 GMT; expires=Wed, 31 Oct 2012 11:00:00 GMT;</code>
ログイン後にコピー
ログイン後にコピー

expiresこのようにこの関数を呼び出すことができます。

document.cookie = "visits=3; path=/;";
document.cookie = "last-visit=Mon, 15 Oct 2012 19:36:00 GMT; expires=Wed, 31 Oct 2012 11:00:00 GMT;";
ログイン後にコピー

クッキーを設定したので、それらを取得できる必要があります。これは、指定されたキーと次の

関数を使用して行います。見つかった場合、キーの値を返し、それ以外の場合はnullを返します。
console.log(document.cookie);
// 打印 visits=3; last-visit=Mon, 15 Oct 2012 19:36:00
ログイン後にコピー

getCookie()

の使用は非常に簡単です。以下に示すように、キーをパラメーターとして渡すだけです。
function createCookie(name, value, expires, path, domain) {
  var cookie = name + "=" + escape(value) + ";";

  if (expires) {
    // 如果是日期
    if(expires instanceof Date) {
      // 如果不是有效的日期
      if (isNaN(expires.getTime()))
       expires = new Date();
    }
    else
      expires = new Date(new Date().getTime() + parseInt(expires) * 1000 * 60 * 60 * 24);

    cookie += "expires=" + expires.toGMTString() + ";";
  }

  if (path)
    cookie += "path=" + path + ";";
  if (domain)
    cookie += "domain=" + domain + ";";

  document.cookie = cookie;
}
ログイン後にコピー

getCookie()ここで、Cookieを削除するために最後の関数が必要です。表示される関数は、指定された名前が設定されているかどうかをテストし、有効期限を過去に設定するためにテストするために依存するため、非常に簡単です。

createCookie("website", "audero.it", new Date(new Date().getTime() + 10000));
createCookie("author", "aurelio", 30);
ログイン後にコピー
この関数を考慮して、Cookieを削除するには、単純に書くことができます。

getCookie()表示された関数を使用すると、Cookieを簡単に管理できます。ネットワーク上には、他にも多くのCookie処理機能があります。あなたが見つけることができる多数の機能の中で、私はあなたにquirksmode.comでフロントエンド開発の第一人者Peter-Paul Koch(P.P.K.)によって書かれた機能をあなたに見せたいと思います。この記事にそれらを含めることを許可してくれた彼に感謝したいと思います。 P.P.K.クッキーを作成する機能を以下に示します。 createCookie()

同様に、Cookieを取得するには、次の関数を使用します。
function getCookie(name) {
  var regexp = new RegExp("(?:^" + name + "|;\s*"+ name + ")=(.*?)(?:;|$)", "g");
  var result = regexp.exec(document.cookie);
  return (result === null) ? null : result[1];
}
ログイン後にコピー

これは、Cookieを削除する関数です。
console.log(getCookie("author")); // 打印 aurelio
console.log(getCookie("nothing")); // 打印 null
ログイン後にコピー

function deleteCookie(name, path, domain) {
  // 如果 Cookie 存在
  if (getCookie(name))
    createCookie(name, "", -1, path, domain);
}
ログイン後にコピー
結論

deleteCookie("author");
console.log(getCookie("author")); // 现在打印 null
ログイン後にコピー
この記事では、クッキーが何であるか、どのように作られているのか、長所と短所を学びました。また、カスタム関数を使用してCookieを処理する方法も学びました。以前の投稿で指摘したように、JavaScriptにはいくつかの基本的なユーティリティ関数が欠落しています。幸いなことに、独自の機能を簡単に構築したり、ネットワークを検索して問題を解決したりできます。

JavaScriptのCookieの取り扱いに関する

function createCookie(name,value,days) {
  if (days) {
    var date = new Date();
    date.setTime(date.getTime()+(days*24*60*60*1000));
    var expires = "; expires="+date.toGMTString();
  }
  else var expires = "";
  document.cookie = name+"="+value+expires+"; path=/";
}
ログイン後にコピー
FAQ(FAQS)(長さが長すぎて擬似オリジナルの目標と一致しないため、FAQパーツはここで省略されています。FAQパーツの内容は元のテキストと非常に一致しており、擬似原産性は困難です。したがって、元のテキストを保管してください。)

以上がJavaScriptのCookieを処理する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート