ホームページ バックエンド開発 PHPチュートリアル PHPでのセッションの詳細説明

PHPでのセッションの詳細説明

Jun 23, 2016 pm 02:31 PM

はじめに: これは、PHP のセッションを説明する詳細ページです。PHP に関連する知識、スキル、経験、およびいくつかの PHP ソース コードを紹介します。

class='pingjiaF' Frameborder='0' src='http://biancheng.dnbcw.info/pingjia.php?id=324031'scroll='no'> 概要

セッションとは、ユーザーが特定のコンテンツを閲覧することを指します。ウェブサイトを開いたとき、そのウェブサイトにアクセスしてからブラウザを閉じるまでの時間が、ユーザーがウェブサイトの閲覧に費やす時間となります。上記の定義から、セッションは実際には特定の時間の概念であることがわかります。

一般的に、Webサイトのあるページ内の変数(サーバーサイド変数を指します。以下同じ)は、次のページでは使用できません。セッションで扱うのが簡単です。セッションに登録した変数をグローバル変数として利用できます。このようにして、ユーザー ID 認証、プログラム ステータスの記録、ページ間のパラメーター転送にセッションを使用できます。

PHP3バージョンでセッションを実装するにはどうすればよいですか?

PHP3 自体はセッション関数を実装していません。実装するには他のメソッドを使用するしかありません。最も有名なのは phplib です。 phplib の最も基本的な機能には、ユーザー認証、セッション管理、権限、データベースの抽象化が含まれます。次に、phplibを使用してセッションを実装する方法を説明します。

1. まずphplibをインストールします(環境はwin2000 php3.0.16 Apache1.3.12 phplib7.2c mysql3.23.21 for win32です)

まずphplibを解凍すると中に「php」ディレクトリがあるので、このディレクトリをApacheのインストール配下にコピーしますコンテンツ。例: Apache は d:Apache ディレクトリにインストールされており、次に「php」ディレクトリを d:Apache にコピーし、phplib ディレクトリのページ ディレクトリ内のファイルとディレクトリ (ディレクトリ自体を除く) を d:Apachehtdocs にコピーします。

phplib クラス ライブラリは、システムに応じて初期化する必要がある場合があります。これには、マシンの実際の状況に応じて変更できる、いくつかの基本的なパラメーターが含まれています。

d:Apachephpprepend.php ファイル内のプログラムを次のように変更します:
if (!isset($_PHPLIB) or !is_array($_PHPLIB)) {
$_PHPLIB["libdir"] = "d:/ Apache /php/"; //phplib 下の php ディレクトリへのパス
}

d:Apachephplocal.inc ファイルを変更します:
class DB_Example extends DB_Sql {
var $Host = "localhost"; // のホスト名mysql データベース
var $Database = "test"; //データベース名
var $User = "root"; //データベースユーザー名
var $Password = "1234567"; //データベースユーザーパスワード
}


最後にphplib ディレクトリに従って、stuff サブディレクトリ内の create_database.mysql ファイルによって初期テーブルが生成されます。

phplib を使用するすべてのページは、まず phplib の実行に必要なクラス ライブラリ ファイルを見つけることができる必要があるため、php.ini で auto_prepend 変数を設定して、phplib に prepend.php ファイルが含まれており、auto_prepend を " d として指定できます。 :/Apache/php/prepend.php" (引用符付き) と指定すると、各ページに phplib クラス ライブラリが自動的にインクルードされます。これらのファイルが見つかるように、phplib クラス ライブラリが配置されているディレクトリを include 変数に追加することもできます。

2. page_open() 関数を呼び出す

phplib を使用するすべてのページでは、まず初期化のために page_open 関数を呼び出す必要があります。例:

page_open(array("sess" => "Test_Session " ));
?>


配列変数 (sess) は、いくつかの状態保存オブジェクトを初期化するために使用されます。ここで注意すべき点: phplib 組み込み名 (sess) を使用する必要があります。これらの組み込み名はローカルで定義されています。 .inc

phplibはCookieを使用して状態情報を保存するため、ページコンテンツをブラウザに出力する前にpage_open()関数を呼び出す必要があります。 PHP スクリプトは、関連するステータス データをデータベースに書き戻す page_close() で終わる必要があります。そうしないと、変数が失われます。

3. 具体的な用途。

変数を登録したら、セッションが終了するまで後続のページでその変数を使用できます。メソッド:

register( "varname") ?>

;
ここでの varname は変数値ではなく、変数名であることに注意してください。最初に変数名を指定してから値を割り当てることができます。特定のページで変数の値を変更でき、後続のページで変数にアクセスすると、変更された値が取得されます。変数の型は多様で、文字列、数値、配列などがあります。説明すると:

最初のページ:

page_open(array("sess" => "Test _Session"))
$sess->register("welcome"); // 変数を登録 $ welcome, $
$welcome="Hello, PHP world!";
……
page_close();
?>


2ページ目:

page_open(); // セッション開始
echo $welcome;// 最初のページに定義されている $welcome を表示
page_close();/// ステータス情報を保存
?>
変数を登録した後、最後にページが page_close() 関数を呼び出したとき、各セッション変数はデータベースに書き戻されます。 page_close() 関数を呼び出すのを忘れた場合、変数はデータベースに書き戻されず、予期しない結果が生じる可能性があります。変数が使用され、不要になった場合は、次の関数を呼び出して変数を削除できます。


page_open(array("sess" => "Test _Session"));
……
$sess ->unregister( "variable_name");
……
page_close();

PHP4版ではセッションはどのように実装されているのでしょうか?

PHP4 のセッションもセッション ID を保存するために Cookie に依存し、変数を保存するためにファイル システムを使用します (デフォルトでは)。そのため、そのセッション変数はオブジェクトを保存できません。もちろん、セッションをデータベースに保存することもできます。


php4 にはセッションに関連する関数が多数あります (詳細については、php.ini の設定を参照してください)。通常、呼び出す必要がある関数は session_start()、session_register()、session_is_registered() の 3 つだけです。

セッションが必要な各ページの先頭で session_start() 関数を呼び出します。例:




$welcome="hello world !";
session_register("welcome");//$welcome変数を登録します、$記号がないことに注意してください
if(session_is_registered("welcome"))//$welcome変数が登録されているか確認します
echo " welcome 変数が登録されました!
sess_open($sess_path, $session_name);
この関数は初期化のためにセッションハンドラーによって呼び出されます。
パラメータ $sess_path は、php.ini ファイルの session.save_path オプションに対応します。
パラメータ $session_name は、php.ini の session.name オプションに対応します。

sess_close();
この関数は、ページの実行が終了し、セッションハンドラーを閉じる必要があるときに呼び出されます


sess_read($key)
この関数は、セッションハンドラーが指定されたセッションキー値($key)を読み取るときに取得されます) そして、$key として識別されるセッション データを返します (注: シリアル化とは、プログラムの終了時または必要なときに変数またはオブジェクトをファイルに保存し、次のプログラムの実行時または必要なときにそれらをメモリに転送するテクノロジです。 . Data メソッドを保存するだけとは異なります。)

sess_write($key, $val);
この関数 data は、セッション ハンドラーがデータを保存する必要があるときに呼び出されます (プログラムの最後に発生することがよくあります)。これは、sess_read($key) 関数を使用して次回取得できる場所にデータを保存する役割を果たします。

sess_destroy($key);
この関数はセッションを破棄する必要がある場合に使用されます。セッションを削除し、環境をクリアする責任があります。

sess_gc($maxlifetime);
この関数はフラグメントのクリーンアップを担当します。この場合、古いセッション データを削除する必要があります。セッション ハンドラーはこれらを時々呼び出します。

カスタマイズされたプログラムは、特定の状況に応じて、mysql データベースまたは DBM ファイルを使用してセッション データを保存できます。サポートに mysql を使用する場合は、次の手順を実行する必要があります:


まず mysql でセッション データベースを作成し、セッション テーブルを作成します:


mysql> CREATE DATABASE session;
mysql> GRANT select、insert、update、delete ON セッション。
マシンのデータベース設定に一致する変数:


* データベースのホスト名*/
$SESS_DBNAME = "sessions"; /* データベース名*/
$SESS_DBUSER = " phpsession"; /* データベースのユーザー名*/
$SESS_DBPASS = "phpsession"; /* データベースのパスワード*/

$SESS_DBH = "";
$SESS_LIFE = get_cfg_var("session.gc_maxlifetime");

……// カスタマイズされた関数


session_set_save_handler( "sess_open", "sess_close", "sess_read", "sess_destroy" , "sess_gc");
?>

dbm ファイルを使用する場合のインターフェイスをカスタマイズします:
$SESS_DBM = ""
$SESS_LIFE = get_cfg_var("session.gc_maxlifetime"); ..//カスタマイズされた関数

session_set_save_handler("sess_open", "sess_close", "sess_read", "sess_write", "sess_destroy" , "sess_gc");
?>

セッションカスタマイズされたテストコード:



<? php
...

if ($handler == "dbm") include("session_dbm.php");//使用するインターフェース
elseif ($handler == "mysql") include("session_mysql.php") ;
else ……

session_start();
……
?>

認証時にSessionを使うには?

ユーザー認証に使用できるセッション:

ユーザーが正当であるかどうかを確認します:
session_start();
…//検証プロセス
session_register("reguser");




別のページでユーザーがログインしているかどうかを確認します



?
session_start();
if(isset($reguser)&&$reguser!=""){// すでにログインしている場合
echo " 、ようこそ" ;
}else{// ログインしていない場合
echo "Please register first!";

}
}

ユーザーはログアウトします:

session_destroy();

?>

達成方法 複数のセッションが同時に実行されていますか?

質問: 自分のユニットの購入、販売、在庫システムを作成していたとき、複数のユーザーが同時に php アプリケーションに入力できるようにする必要があることがわかりました。当初設計された静的で一意のセッション ID は、データの混乱を引き起こしました。このようにして、一意のセッション ID を動的に生成することが最優先事項になります。

解決策は簡単です。PHP ファイル名とタイムスタンプを一意のセッション ID として使用しました。これにより、プログラム内の各セッションが適切な位置に配置され、混乱がなくなりました。

同じ問題を抱えている友人が解決策を見つけられるように、以下に私のソースコードを公開します。


//変数を保存するために PHP セッションを開始します

$micro = microtime(); // ストリップ空白を削除します
$micro = str_replace(".","",$micro); // ピリオドを削除します
$mysessionname = "po_maint" .
session_name($mysessionname); ;


プログラムのメモ:

ページ間で一意のセッション名の変数を渡すには、mysessionname を使用します。この名前も使用する場合は、上記のプログラムに小さな変更を加える必要があります。 Mysessionname は、セッションの開始前にすでに存在しているため、セッションの内部変数名にすることはできません。複数のセッションが元の Cookie ファイルを確実に上書きするため、Mysessionname を Cookie モードで保存することはできません。非表示のフォームフィールドを使用して保存できます。そうすれば問題はありません。


「PHPでのセッションの詳しい説明」の関連記事をもっと見る》

J2EEが大好きで、Java Michael Jackson Video Station JSONオンラインツールをフォローしてください

http://biancheng.dnbcw.info/php/324031.html pageNo:15
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホット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衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

セッションのハイジャックはどのように機能し、どのようにPHPでそれを軽減できますか? セッションのハイジャックはどのように機能し、どのようにPHPでそれを軽減できますか? Apr 06, 2025 am 12:02 AM

セッションハイジャックは、次の手順で達成できます。1。セッションIDを取得します。2。セッションIDを使用します。3。セッションをアクティブに保ちます。 PHPでのセッションハイジャックを防ぐための方法には次のものが含まれます。1。セッション_regenerate_id()関数を使用して、セッションIDを再生します。2。データベースを介してストアセッションデータを3。

JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 Apr 05, 2025 am 12:04 AM

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

確固たる原則と、それらがPHP開発にどのように適用されるかを説明してください。 確固たる原則と、それらがPHP開発にどのように適用されるかを説明してください。 Apr 03, 2025 am 12:04 AM

PHP開発における固体原理の適用には、次のものが含まれます。1。単一責任原則(SRP):各クラスは1つの機能のみを担当します。 2。オープンおよびクローズ原理(OCP):変更は、変更ではなく拡張によって達成されます。 3。Lischの代替原則(LSP):サブクラスは、プログラムの精度に影響を与えることなく、基本クラスを置き換えることができます。 4。インターフェイス分離原理(ISP):依存関係や未使用の方法を避けるために、細粒インターフェイスを使用します。 5。依存関係の反転原理(DIP):高レベルのモジュールと低レベルのモジュールは抽象化に依存し、依存関係噴射を通じて実装されます。

システムの再起動後にUnixSocketの権限を自動的に設定する方法は? システムの再起動後にUnixSocketの権限を自動的に設定する方法は? Mar 31, 2025 pm 11:54 PM

システムが再起動した後、UnixSocketの権限を自動的に設定する方法。システムが再起動するたびに、UnixSocketの許可を変更するために次のコマンドを実行する必要があります:sudo ...

phpstormでCLIモードをデバッグする方法は? phpstormでCLIモードをデバッグする方法は? Apr 01, 2025 pm 02:57 PM

phpstormでCLIモードをデバッグする方法は? PHPStormで開発するときは、PHPをコマンドラインインターフェイス(CLI)モードでデバッグする必要がある場合があります。

PHPでの後期静的結合を説明します(静的::)。 PHPでの後期静的結合を説明します(静的::)。 Apr 03, 2025 am 12:04 AM

静的結合(静的::) PHPで後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。

PHPのCurlライブラリを使用してJSONデータを含むPOSTリクエストを送信する方法は? PHPのCurlライブラリを使用してJSONデータを含むPOSTリクエストを送信する方法は? Apr 01, 2025 pm 03:12 PM

PHP開発でPHPのCurlライブラリを使用してJSONデータを送信すると、外部APIと対話する必要があることがよくあります。一般的な方法の1つは、Curlライブラリを使用して投稿を送信することです。

See all articles