検索
ホームページバックエンド開発PHPチュートリアルPHPセッションの詳細分析_PHPチュートリアル

PHPセッションの詳細分析_PHPチュートリアル

Jul 13, 2016 pm 05:48 PM
phpsession分析する原理仕事書類サーバ詳しい

1. PHPセッションの仕組み
デフォルトでは、SESSION ファイルが保存されるディレクトリは、sess_c72665af28a8b14c0fe11afe3b59b51b のように、ファイル名の先頭に sess_ が付けられ、その後に SESSION ID が続きます。ユーザーのファイルを取得し、クライアントから提供されたセッション ID に基づいて変数の値を取得できます。セッション ID は、クライアントの Cookie または Http1.1 プロトコルの Query_String (部分) を使用してサーバーに送信できます。アクセスされた URL の「?」の後)、サーバーはセッション ディレクトリを読み取ります。つまり、セッションIDはサービス上に保存されているセッション変数を取得するためのIDカードです。
session_start(); コードが実行されると、サーバー上にセッション ファイルが生成され、それに一意に対応するセッション ID が生成され、生成されたセッション ファイルに特定の形式で格納されるように定義されます。セッション ID を通じて、定義された変数を取得できます。ページを通過した後、セッションを使用するには、session_start() を再度実行する必要があります。別のセッション ファイルが生成され、それに応じて、このセッション ID を使用して最初のセッション ファイルを取得することはできません。このセッション ID はセッションを開くための「キー」ではないため、変数は入力されます。 session_start(); の前にコード session_id($session id); を追加すると、新しいセッション ファイルは生成されず、この ID に対応するセッション ファイルが直接読み取られます。
2. Session
の共通機能と使い方 2.1 Session_start(): セッションを開始するか、既存のセッションを返します。
この関数にはパラメータがなく、戻り値は true です。 Cookie ベースのセッションを使用する場合、Session_start() を使用する前にブラウザは出力を生成できません。php.ini で session.auto_start=1 を有効にすると、セッションを使用するたびに session_start() を呼び出す必要がなくなります。セッション。ただし、このオプションを有効にする場合はいくつかの制限があります。session.auto_start が実際に有効になっている場合は、セッション内でオブジェクトを再作成するためにセッションを開始する前にクラス定義をロードする必要があるため、オブジェクトをセッションに配置することはできません。
2.2 SESSION変数を登録:
PHP5 は、$_SESSION[‘xxx’]=xxx を使用して SESSION グローバル変数を登録します。 session_register() に注意してください
session_unregister、session_is_registered は、php.ini で変更されない限り、php5 では使用されなくなりました
Register_globle はオンに設定されていますが、セキュリティ上の理由から、 register_globle をオフにすることを強くお勧めします。
HTTP_SESSION_VARS の使用は推奨されなくなり、代わりに $_SESSION を使用することが公式に推奨されています。
Page1.php
session_start(); //この関数は SESSION を使用する前に呼び出す必要があります。
$_SESSION[‘name’]=”私はブラックトルネード李逵です!” //SESSION変数を登録します
; $_SESSION[‘passwd’]=”mynameislikui”;
$_SESSION[‘時間’]=時間();
// クライアントが Cookie をサポートしている場合、このリンクを通じてセッションを次のページに渡すことができます。
echo '
COOKIE を介して SESSION を渡す';
// クライアントが Cookie をサポートしていない場合、このメソッドを使用してセッションを渡します。
echo '
URL を通じて SESSION を渡す';
Page2.php
session_start();
echo $_SESSION['name'];
echo $_SESSION['passwd'];
echo date('Y m d H:i:s', $_SESSION['time']);
echo '
前のページに戻る';
?>
2.3 session_id ([ string $id ] ): 現在のセッション ID を取得および/または設定します
php5 では、session_id() を使用するか、URL に添付された SID を通じて現在のセッションの session_id と session_name を取得できます。
session_id() に特定の値がある場合 (つまり、パラメーター $id が指定されている場合)、現在の session_id 値が置き換えられます。この関数を使用する前にセッションを開始する必要があります: session_start();
例: セッションの有効期間を手動で設定します:
session_start();
// 1 日保存します
$lifeTime = 24 * 3600;
setcookie(session_name(), session_id(), time() + $lifeTime, "/");
?>
実際、Session には、Session の有効期間を設定するための関数 session_set_cookie_params() も用意されています。この関数は、session_start() 関数が呼び出される前に呼び出す必要があります。 // 1 日保存します
$lifeTime = 24 * 3600;
session_set_cookie_params($lifeTime);
session_start();
$_SESSION["管理者"] = true;
?>
クライアントが IE 6.0 を使用している場合、session_set_cookie_params() 関数で Cookie を設定する際に問題が発生するため、引き続き setcookie 関数を手動で呼び出して Cookie を作成します。
2.4 セッションが存在するかどうかを確認しますか?
以前の PHP バージョンでは、通常、セッションが存在するかどうかを確認するために session_is_register() が使用されていましたが、$_SESSION[‘XXX’]=XXX を使用してセッション変数を登録すると、session_is_register() 関数は機能しなくなります。
を使用できます 代わりに isset($_SESSION[‘xxx’]) を使用します。
2.5 session_id の変更 session_regenerate_id([bool $delete_old_session]) 変更が成功した場合は true を返し、失敗した場合は false を返します。
この関数を使用して現在のセッションの session_id を変更しますが、$delete_old_session が true でない限り、現在のセッションの他の情報はデフォルトでは変更されません。例:
session_start();
$old_sessionid = session_id();
session_regenerate_id();
$new_sessionid = session_id();
echo "元のセッションID: $old_sessionid
";
echo "新しいセッションID: $new_sessionid
";
echo"

";<br>
print_r($_SESSION);<br>
エコー"
";
?>
2.6 session_name() は、現在のセッションの名前を返すか、現在のセッションの名前を変更します。現在のセッションの名前を変更したい場合は、session_start() の前にこの関数を呼び出す必要があります。注: session_name は数字だけで構成することはできません。少なくとも 1 つの文字を含める必要があります。それ以外の場合は、毎回新しいセッション ID が生成されます。
セッション名の変更の例:
$previous_name = session_name("ウェブサイトID");
echo "新しいセッション名は $previous_name
";
?>

2.7 セッションの削除方法
(1) unset ($_SESSION['xxx']) は 1 つのセッションを削除します。unset ($_SESSION['xxx']) は、登録されているセッション変数の登録を解除するために使用されます。その機能は session_unregister() と同じです。 session_unregister() は PHP5 では使用されなくなったため、廃止される可能性があります。
unset($_SESSION) この関数は使用してはなりません。グローバル変数 $_SESSION が破壊され、それを復元する適切な方法はありません。ユーザーは $_SESSION 変数も登録できなくなります。
(2) $_SESSION=array() 複数のセッションを削除
(3) session_destroy() は現在のセッションを終了し、セッション内のすべてのリソースをクリアします。この関数は、現在のセッションに関連するグローバル変数の設定を解除したり、クライアントのセッション Cookie を削除したりすることはありません。Cookie を削除したい場合は、setcookie() 関数を使用する必要があります。
以下は、セッションの削除に関する公式の PHP ケースです:
//セッションを初期化します
session_start();
/**※すべてのセッション変数を削除する unset($_SESSION[xxx]) を使用して 1 つずつ削除することもできます。 ****/
$_SESSION = array();
/***セッション ID を削除します。セッションはデフォルトで Cookie ベースであるため、setCookie を使用してセッション ID を含む Cookie を削除します。***/
if (isset($_COOKIE[セッション名()])) {
setcookie(session_name(), '', time()-42000, '/');
}
//最後にセッションを完全に破棄します。
session_destroy();
?>
これからセッションを削除する手順を導き出すことができます:
①session_start()
②$_SESSION=array()/unset($_SESSION['xxx'])
③session_destroy()

3. セッションのクロスページ配信の問題:
3.1 セッション ID を渡す方法は 2 つあります: Cookie URL パラメーター
セッション モジュールは両方の方法をサポートします。 Cookie はより最適化されていますが、常に利用できるわけではないため、代替手段も提供されています。 2 番目の方法では、セッション ID を URL の途中に直接埋め込みます。
PHP はページ間のリンクを透過的に変換できます。 PHP 4.2 より前のバージョンを使用する場合は、PHP をコンパイルするときに --enable-trans-sid 構成オプションを使用して手動でアクティブ化する必要があります。この構成オプションと実行時オプション session.use_trans_sid が両方とも有効になっている場合 (php.ini を変更する)、相対 URI はセッション ID を含むように自動的に変更されます。
注: 非相対 URL は外部サイトを指していると想定されているため、SID が追加されません。これは、SID が別のサーバーに漏洩するセキュリティ リスクになる可能性があるためです。
あるいは、定数 SID を使用することもできます。クライアントがセッション Cookie を送信しない場合、SID は session_name=session_id の形式になります。それ以外の場合は空の文字列になります。したがって、無条件で URL に埋め込むことができます。
3. 2 ページ間セッション転送の問題を解決する 3 つの方法
①クライアントがCookieを無効にしている。
②ブラウザに問題があり、一時的にCookieにアクセスできなくなっています
③php.iniのsession.use_trans_sid = 0、またはコンパイル時に--enable-trans-sidオプションがオンになっていない
クライアントの Cookie が無効になっている場合、または問題が発生している場合、PHP は自動的にセッション ID を URL に付加し、セッション ID を介してセッション変数をページ間で使用できるようにします。ただし、この添付ファイルには特定の条件もあります。「php.ini で session.use_trans_sid = 1、またはコンパイル時に --enable-trans-sid オプションがオンになっている」。 上記の原則を理解すると、セッションのクロスページ転送の問題を解決する 3 つの方法が考えられます。
1. php.ini で session.use_trans_sid = 1 を設定するか、コンパイル時に --enable-trans-sid オプションをオンにして、PHP がページ間でセッション ID を自動的に渡すようにします。
(誰かが言いました: しかし、テスト中に、ページ内で header('location: xx.php') と javascript window.location=xx.php を使用するように php.ini を変更する方法では、望ましい効果が得られませんでした。現在は正常に見つかりました。 xx )
。 2. URL を通じて値を手動で渡し、非表示のフォームを通じてセッション ID を渡します。
3. session_id をファイル、データベースなどに保存し、クロスページ プロセス中に手動で呼び出します。
以下に例を示します:
最初の状況:
page1.php
session_start();
$_SESSION['var1']="中華人民共和国";
$url="次のページ";
$url をエコー;
?>
page2.php
session_start();
echo "渡されたセッション変数 var1 の値は次のとおりです: ".$_SESSION['var1'];
?>
上記のコードを実行すると、クライアント Cookie が正常であれば、「中華人民共和国」という結果が得られるはずです。
ここで、クライアント上の Cookie を手動で閉じて再度実行すると、結果が得られない可能性があります。結果が得られない場合は、php.ini で session.use_trans_sid = 1 を設定するか、コンパイル時に --enable-trans-sid オプションをオンにすると、「中華人民共和国」という結果が得られます
2 番目の方法:
s1.php
session_start();
$_SESSION['var1']="中華人民共和国";
$sn = session_id();
//PHP5 は session_id() を表す定数 SID を定義します。$url='Next page' と書くこともできます。
$url="次のページ";
$url をエコー;
?>


s2.php
session_id($_GET['s']);
session_start();
echo "渡されたセッション変数 var1 の値は次のとおりです: www.2cto.com".$_SESSION['var1'];
?>

3 番目の方法:
ログイン.html



ログイン



ログインしてください:

ユーザー名:

パスワード:


フォーム>
声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
PHP:サーバー側のスクリプト言語の紹介PHP:サーバー側のスクリプト言語の紹介Apr 16, 2025 am 12:18 AM

PHPは、動的なWeb開発およびサーバー側のアプリケーションに使用されるサーバー側のスクリプト言語です。 1.PHPは、編集を必要とせず、迅速な発展に適した解釈言語です。 2。PHPコードはHTMLに組み込まれているため、Webページの開発が簡単になりました。 3。PHPプロセスサーバー側のロジック、HTML出力を生成し、ユーザーの相互作用とデータ処理をサポートします。 4。PHPは、データベースと対話し、プロセスフォームの送信、サーバー側のタスクを実行できます。

PHPとWeb:その長期的な影響を調査しますPHPとWeb:その長期的な影響を調査しますApr 16, 2025 am 12:17 AM

PHPは過去数十年にわたってネットワークを形成しており、Web開発において重要な役割を果たし続けます。 1)PHPは1994年に発信され、MySQLとのシームレスな統合により、開発者にとって最初の選択肢となっています。 2)コア関数には、動的なコンテンツの生成とデータベースとの統合が含まれ、ウェブサイトをリアルタイムで更新し、パーソナライズされた方法で表示できるようにします。 3)PHPの幅広いアプリケーションとエコシステムは、長期的な影響を促進していますが、バージョンの更新とセキュリティの課題にも直面しています。 4)PHP7のリリースなど、近年のパフォーマンスの改善により、現代の言語と競合できるようになりました。 5)将来的には、PHPはコンテナ化やマイクロサービスなどの新しい課題に対処する必要がありますが、その柔軟性とアクティブなコミュニティにより適応性があります。

なぜPHPを使用するのですか?利点と利点が説明されましたなぜPHPを使用するのですか?利点と利点が説明されましたApr 16, 2025 am 12:16 AM

PHPの中心的な利点には、学習の容易さ、強力なWeb開発サポート、豊富なライブラリとフレームワーク、高性能とスケーラビリティ、クロスプラットフォームの互換性、費用対効果が含まれます。 1)初心者に適した学習と使用が簡単。 2)Webサーバーとの適切な統合および複数のデータベースをサポートします。 3)Laravelなどの強力なフレームワークを持っています。 4)最適化を通じて高性能を達成できます。 5)複数のオペレーティングシステムをサポートします。 6)開発コストを削減するためのオープンソース。

神話を暴く:PHPは本当に死んだ言語ですか?神話を暴く:PHPは本当に死んだ言語ですか?Apr 16, 2025 am 12:15 AM

PHPは死んでいません。 1)PHPコミュニティは、パフォーマンスとセキュリティの問題を積極的に解決し、PHP7.xはパフォーマンスを向上させます。 2)PHPは最新のWeb開発に適しており、大規模なWebサイトで広く使用されています。 3)PHPは学習しやすく、サーバーはうまく機能しますが、タイプシステムは静的言語ほど厳格ではありません。 4)PHPは、コンテンツ管理とeコマースの分野で依然として重要であり、エコシステムは進化し続けています。 5)OpcacheとAPCを介してパフォーマンスを最適化し、OOPと設計パターンを使用してコードの品質を向上させます。

PHP対Pythonの議論:どちらが良いですか?PHP対Pythonの議論:どちらが良いですか?Apr 16, 2025 am 12:03 AM

PHPとPythonには独自の利点と短所があり、選択はプロジェクトの要件に依存します。 1)PHPは、Web開発に適しており、学習しやすく、豊富なコミュニティリソースですが、構文は十分に近代的ではなく、パフォーマンスとセキュリティに注意を払う必要があります。 2)Pythonは、簡潔な構文と学習が簡単なデータサイエンスと機械学習に適していますが、実行速度とメモリ管理にはボトルネックがあります。

PHPの目的:動的なWebサイトの構築PHPの目的:動的なWebサイトの構築Apr 15, 2025 am 12:18 AM

PHPは動的なWebサイトを構築するために使用され、そのコア関数には次のものが含まれます。1。データベースに接続することにより、動的コンテンツを生成し、リアルタイムでWebページを生成します。 2。ユーザーのインタラクションを処理し、提出をフォームし、入力を確認し、操作に応答します。 3.セッションとユーザー認証を管理して、パーソナライズされたエクスペリエンスを提供します。 4.パフォーマンスを最適化し、ベストプラクティスに従って、ウェブサイトの効率とセキュリティを改善します。

PHP:データベースとサーバー側のロジックの処理PHP:データベースとサーバー側のロジックの処理Apr 15, 2025 am 12:15 AM

PHPはMySQLIおよびPDO拡張機能を使用して、データベース操作とサーバー側のロジック処理で対話し、セッション管理などの関数を介してサーバー側のロジックを処理します。 1)MySQLIまたはPDOを使用してデータベースに接続し、SQLクエリを実行します。 2)セッション管理およびその他の機能を通じて、HTTPリクエストとユーザーステータスを処理します。 3)トランザクションを使用して、データベース操作の原子性を確保します。 4)SQLインジェクションを防ぎ、例外処理とデバッグの閉鎖接続を使用します。 5)インデックスとキャッシュを通じてパフォーマンスを最適化し、読みやすいコードを書き、エラー処理を実行します。

PHPでのSQL注入をどのように防止しますか? (準備された声明、PDO)PHPでのSQL注入をどのように防止しますか? (準備された声明、PDO)Apr 15, 2025 am 12:15 AM

PHPで前処理ステートメントとPDOを使用すると、SQL注入攻撃を効果的に防ぐことができます。 1)PDOを使用してデータベースに接続し、エラーモードを設定します。 2)準備方法を使用して前処理ステートメントを作成し、プレースホルダーを使用してデータを渡し、メソッドを実行します。 3)結果のクエリを処理し、コードのセキュリティとパフォーマンスを確保します。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)