ホームページ >ウェブフロントエンド >jsチュートリアル >反応のクッキーとセッションを理解する
キーポイント
document.cookie
APIを使用したり、カスタムフックを作成したり、サードパーティライブラリを使用してCookieを実装できます。 Reactのセッションは、サーバー側のセッションまたはトークンベースの認証を通じて実装できます。 HttpOnly
フラグを使用してCookieを保護し、セッションの有効期限とトークンの更新を有効にし、機密データの暗号化、secure
属性を使用し、認証とアプリケーションのステータスを分離します。 SameSite
JS-Cookiesなどのサードパーティライブラリは、ReactアプリケーションのCookie管理を簡素化できます。セキュリティパッチと改善の恩恵を受けるために、依存関係を定期的に更新することをお勧めします。 Cookieとセッションは、Web開発の不可欠なコンポーネントです。それらは、ユーザーデータ、認証、およびステータスを管理するための媒体です。
Cookieは、ユーザーのデバイス上のWebブラウザーに保存されている少量のデータ(最大4096バイト)です。典型的なCookieはこのように見えます(これはGoogle Analyticsです -
- Cookie):
_ga
<code>名称:_ga 值:GA1.3.210706468.1583989741 域:.example.com 路径:/ 过期/最大年龄:2022-03-12T05:12:53.000Z</code>
「セッション」とは、ユーザーがWebサイトを閲覧する時間を指します。それらは、一定期間にわたるユーザーの継続的なアクティビティを表します。
Reactでは、Cookieとセッションが堅牢で安全なアプリケーションを作成するのに役立ちます。
クッキーとセッションの詳細な基本
cookie
Cookieは、主に複数のリクエストでクライアントとサーバー間の状態データを維持します。 Cookieを使用すると、ユーザーのマシンからデータを保存および取得し、よりパーソナライズされた/シームレスなブラウジングエクスペリエンスを提供できます。
さまざまな種類のCookieがあり、それぞれが意図したユースケースに最適です。
<code>名称:_ga 值:GA1.3.210706468.1583989741 域:.example.com 路径:/ 过期/最大年龄:2022-03-12T05:12:53.000Z</code>
<code class="language-javascript">// 示例:设置会话 Cookie document.cookie = "sessionID=abc123; path=/";</code>
<code class="language-javascript">// 示例:设置具有过期日期的持久性 Cookie document.cookie = "username=JohnDoe; expires=Fri, 31 Dec 2023 23:59:59 GMT; path=/";</code>
<code class="language-javascript">document.cookie = "token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...; path=/";</code>
セッションは、アクセス中にユーザー固有のデータを保存する論理サーバー側のエンティティを表します。セッションはCookieに密接に関連していますが、通常、セッションの識別子はクッキー側にCookieを保存します。 (Cookieデータはサーバーに保存されています。)
サーバー側のセッションセッションデータをサーバーに保存することが含まれます。 Express.jsのようなフレームワークは、サーバー側のセッションを使用してユーザーステータスを管理します:
<code class="language-javascript">// 示例:在 Cookie 中存储用户偏好设置 document.cookie = "theme=dark; path=/";</code>
クライアントセッション。 クライアントセッションを使用する場合、ノード間のデータストアを複製、検証、または照会する必要はありません。 「クライアントセッション」はクライアントのセッションストレージ情報を参照する場合がありますが、通常、セッション識別子を保存するためにCookieを使用することが含まれます。
<code class="language-javascript">// 使用 express-session 中间件 const express = require('express'); const session = require('express-session'); const app = express(); app.use(session({ secret: 'your-secret-key', resave: false, saveUninitialized: true, }));</code>
次のセクションでは、ReactアプリケーションでのCookieとセッションの実際の実装について説明します。
実装Cookie
reactにcookieを実装する方法は、
に含まれます
document.cookie
カスタムフックを作成しますdocument.cookie
反応でCookieを使用する最も基本的な方法は、
document.cookie
<code class="language-javascript">// 示例:在客户端的 Cookie 中存储 Session ID document.cookie = "sessionID=abc123; path=/";</code>
<code class="language-javascript">// 设置 Cookie 的函数 const setCookie = (name, value, days) => { const expirationDate = new Date(); expirationDate.setDate(expirationDate.getDate() + days); document.cookie = `${name}=${value}; expires=${expirationDate.toUTCString()}; path=/`; }; // 示例:设置一个在 7 天后过期的用户名 Cookie setCookie("username", "john_doe", 7);</code>
<code class="language-javascript">// 按名称获取 Cookie 值的函数 const getCookie = (name) => { const cookies = document.cookie .split("; ") .find((row) => row.startsWith(`${name}=`)); return cookies ? cookies.split("=")[1] : null; }; // 示例:获取“username” Cookie 的值 const username = getCookie("username");</code>
<code class="language-javascript">// 按名称删除 Cookie 的函数 const deleteCookie = (name) => { document.cookie = `${name}=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/`; }; // 示例:删除“username” Cookie deleteCookie("username");</code>サードパーティライブラリを使用
useCookie
JS-Cookiesなどのサードパーティライブラリは、ReactアプリケーションでCookie管理を簡素化します。
インストールライブラリ:
Reactコンポーネントでの使用
使用:<code class="language-javascript">// useCookie.js import { useState, useEffect } from "react"; const useCookie = (cookieName) => { const [cookieValue, setCookieValue] = useState(""); useEffect(() => { const cookie = document.cookie .split("; ") .find((row) => row.startsWith(`${cookieName}=`)); setCookieValue(cookie ? cookie.split("=")[1] : ""); }, [cookieName]); const setCookie = (value, expirationDate) => { document.cookie = `${cookieName}=${value}; expires=${expirationDate.toUTCString()}; path=/`; }; const deleteCookie = () => { document.cookie = `${cookieName}=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/`; }; return [cookieValue, setCookie, deleteCookie]; }; // 在 React 组件中的用法 const [username, setUsername, deleteUsername] = useCookie("username");</code>
<code>名称:_ga 值:GA1.3.210706468.1583989741 域:.example.com 路径:/ 过期/最大年龄:2022-03-12T05:12:53.000Z</code>
これらのさまざまなアプローチを理解することで、Reactアプリケーションのニーズと複雑さに最適なアプローチを選択することができます。
セッションを実装
セッションを実装する方法は次のとおりです
サーバーサイドセッション
Express-sessionを使用してExpress.jsを設定します: 最初に、必要なパッケージをインストールします:
さあ、Expressを構成:
<code class="language-javascript">// 示例:设置会话 Cookie document.cookie = "sessionID=abc123; path=/";</code>セッションID Cookieに署名するために使用され、セキュリティの追加レイヤーを追加するために使用されます。
<code class="language-javascript">// 示例:设置具有过期日期的持久性 Cookie document.cookie = "username=JohnDoe; expires=Fri, 31 Dec 2023 23:59:59 GMT; path=/";</code>
ルーティングでセッションを使用します:
セッションを構成した後、ルートでそれらを使用できます:secret
<code class="language-javascript">document.cookie = "token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...; path=/";</code>
トークンベースの認証/profile
トークンベースの認証は、最新のReactアプリケーションでセッションを管理する方法です。サーバーでの認証が成功した後にトークンを生成し、クライアントに送信し、後続のリクエストのヘッダーに含めることが含まれます。
サーバーはJWT(JSON Webトークン)を生成し、クライアントに送信します。
リクエストにトークンを含める: クライアント(反応):
<code class="language-javascript">// 示例:在 Cookie 中存储用户偏好设置 document.cookie = "theme=dark; path=/";</code>
上記は、Reactコンテキストを使用して認証ステータスを管理します。
<code class="language-javascript">// 使用 express-session 中间件 const express = require('express'); const session = require('express-session'); const app = express(); app.use(session({ secret: 'your-secret-key', resave: false, saveUninitialized: true, }));</code>リクエストでトークンを使用します。 トークンを使用して、リクエストのヘッダーに含めます:
login
両方の方法は、セッションを効果的に管理し、安全でシームレスな体験を提供するのに役立ちます。
<code class="language-javascript">// 示例:在客户端的 Cookie 中存储 Session ID document.cookie = "sessionID=abc123; path=/";</code>
セッションとCookieの管理のためのベストプラクティス
Reactアプリケーションが正しく機能するようにするには、以下を実行してください。
およびロゴ保護クッキー
を使用します該当する場合は、常に
およびHttpOnly
HttpOnly
。このフラグは、JavaScriptまたはその他の悪意のあるコードを介したCookieに対する攻撃を防ぎ、クロスサイトスクリプティング(XSS)攻撃のリスクを軽減します。これにより、Cookieはサーバーでのみアクセス可能であることを保証します。
<code>名称:_ga 值:GA1.3.210706468.1583989741 域:.example.com 路径:/ 过期/最大年龄:2022-03-12T05:12:53.000Z</code>
secure
<code class="language-javascript">// 示例:设置会话 Cookie document.cookie = "sessionID=abc123; path=/";</code>
<code class="language-javascript">// 示例:设置具有过期日期的持久性 Cookie document.cookie = "username=JohnDoe; expires=Fri, 31 Dec 2023 23:59:59 GMT; path=/";</code>
エンドポイントは、認証が成功した後、最初のJWTトークンを返します。 /login
エンドポイントは更新トークンを使用して、新しいアクセストークンを生成します。 /refresh-token
<code class="language-javascript">document.cookie = "token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...; path=/";</code>プロパティを使用
SameSite
SameSite
Strict
<code class="language-javascript">// 示例:在 Cookie 中存储用户偏好设置 document.cookie = "theme=dark; path=/";</code>
Lax
<code class="language-javascript">// 使用 express-session 中间件 const express = require('express'); const session = require('express-session'); const app = express(); app.use(session({ secret: 'your-secret-key', resave: false, saveUninitialized: true, }));</code>個別の認証とアプリケーションステータス
Cookie管理に成熟したサードパーティライブラリを使用することを検討してください。 JS-Cookieのようなライブラリは、ネイティブの複雑さを抽象化するシンプルで便利なAPIを提供します。
<code class="language-javascript">// 示例:在客户端的 Cookie 中存储 Session ID document.cookie = "sessionID=abc123; path=/";</code>
セキュリティパッチと改善の恩恵を受けるために、サードパーティのライブラリとフレームワークを最新の状態に保ちます。依存関係の定期的な更新により、当社のアプリケーションが既知の脆弱性の影響を受けないことが保証されます。 document.cookie
<code class="language-javascript">// 设置 Cookie 的函数 const setCookie = (name, value, days) => { const expirationDate = new Date(); expirationDate.setDate(expirationDate.getDate() + days); document.cookie = `${name}=${value}; expires=${expirationDate.toUTCString()}; path=/`; }; // 示例:设置一个在 7 天后过期的用户名 Cookie setCookie("username", "john_doe", 7);</code>
Cookieとセッションは、安全で効率的なReactアプリケーションを構築するための便利なツールです。ユーザー認証を管理したり、ユーザーの設定を維持したり、ステートフルな対話を有効にしたりするために使用されます。
ベストプラクティスに従って実績のあるライブラリを使用することにより、セキュリティに優先順位を付けながらシームレスなユーザーエクスペリエンスを提供する堅牢で信頼できるアプリケーションを作成できます。
この記事が気に入ったら、SitePointから他のエキサイティングなリソースをチェックしてください:
以上が反応のクッキーとセッションを理解するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。