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

セッションとは、ユーザーがWebサイトを閲覧する際に、Webサイトに入ってからブラウザを閉じるまでにかかる時間、つまりユーザーがWebサイトの閲覧に費やす時間を指します。上記の定義から、セッションは実際には特定の時間の概念であることがわかります。

一般的に、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) は、一部の状態保存オブジェクトの初期化に使用されます。ここで注意してください: これらの組み込み名は、local.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変数には登録されました!";
else
echo "welcome変数が登録されていません!";
?>


php4でのセッション処理のカスタマイズ

6つの関数を拡張する必要があります:
_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 Meetings. -> value text not null,
-> PRIMARY KEY (sesskey)
->
次に、session_mysql.php ファイルの $SESS_DB* 変数をマシン上のデータベース設定に一致するように変更します。 ?
$SESS_DBHOST

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

session_set_save_handler( "sess_open", "sess_close", "sess_read", "sess_write", "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_register("count");
...
?>

認証でSessionを使うには?

ユーザー認証にセッションを使用可能:

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

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

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

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


……
?>

複数のセッションを実装する方法同時に実行していますか?

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

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

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

//変数を保存するために PHP セッションを開始します
$micro = microtime()
$micro = str_replace(" ","",$micro); //空白
$micro = str_replace(".","",$micro); // ピリオドを削除します
$mysessionname = "po_maint" .
session_name($mysessionname);

プログラムのメモ:

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

参考アドレス:http://www.newasp.net/tech/php/6538.html

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
セッション固定攻撃をどのように防ぐことができますか?セッション固定攻撃をどのように防ぐことができますか?Apr 28, 2025 am 12:25 AM

セッション固定攻撃を防ぐための効果的な方法には、次のものがあります。1。ユーザーがログインした後にセッションIDを再生します。 2。安全なセッションID生成アルゴリズムを使用します。 3。セッションタイムアウトメカニズムを実装します。 4。HTTPSを使用したセッションデータを暗号化します。これらの措置は、セッションの固定攻撃に直面するときにアプリケーションが破壊されないようにすることができます。

セッションレス認証をどのように実装しますか?セッションレス認証をどのように実装しますか?Apr 28, 2025 am 12:24 AM

セッションのない認証の実装は、サーバー側のセッションストレージなしですべての必要な情報がトークンに保存されるトークンベースの認証システムであるJSonWebtokens(JWT)を使用することで実現できます。 1)JWTを使用してトークンを生成および検証する、2)トークンが傍受されるのを防ぐためにHTTPSが使用されることを確認する、3)クライアント側にトークンを安全に保存する、4)改ざんを防ぐためにサーバー側のトークンを検証する、5)短期アクセスや長期的なリフレイを使用するなどのトークンの取り消しメカニズムを実装する。

PHPセッションに関連するいくつかの一般的なセキュリティリスクは何ですか?PHPセッションに関連するいくつかの一般的なセキュリティリスクは何ですか?Apr 28, 2025 am 12:24 AM

PHPセッションのセキュリティリスクには、主にセッションハイジャック、セッションの固定、セッション予測、およびセッション中毒が含まれます。 1。HTTPSを使用してCookieを保護することにより、セッションハイジャックを防ぐことができます。 2。ユーザーがログインする前にセッションIDを再生することにより、セッションの固定を回避できます。3。セッションの予測は、セッションIDのランダム性と予測不可能性を確保する必要があります。 4.セッションの中毒は、セッションデータを確認およびフィルタリングすることで防ぐことができます。

PHPセッションをどのように破壊しますか?PHPセッションをどのように破壊しますか?Apr 28, 2025 am 12:16 AM

PHPセッションを破壊するには、最初にセッションを開始してから、データをクリアしてセッションファイルを破壊する必要があります。 1。Session_start()を使用してセッションを開始します。 2。Session_unset()を使用して、セッションデータをクリアします。 3.最後に、session_destroy()を使用してセッションファイルを破壊して、データのセキュリティとリソースのリリースを確保します。

PHPのデフォルトセッションの保存パスをどのように変更できますか?PHPのデフォルトセッションの保存パスをどのように変更できますか?Apr 28, 2025 am 12:12 AM

PHPのデフォルトセッションの保存パスを変更する方法は?次の手順で達成できます。Session_save_path( '/var/www/sessions'); session_start(); PHPスクリプトで、セッション保存パスを設定します。 session.save_path = "/var/www/sessions"をphp.iniファイルに設定して、セッションの保存パスをグローバルに変更します。 memcachedまたはredisを使用して、ini_set( 'session.save_handler'、 'memcached')などのセッションデータを保存します。 ini_set(

PHPセッションに保存されているデータをどのように変更しますか?PHPセッションに保存されているデータをどのように変更しますか?Apr 27, 2025 am 12:23 AM

tomodifydatainaphpsession、starthessession withsession_start()、$ _sessiontoset、modify、orremovevariables.1)startthessession.2)

PHPセッションに配列を保存する例を示します。PHPセッションに配列を保存する例を示します。Apr 27, 2025 am 12:20 AM

配列はPHPセッションに保存できます。 1。セッションを開始し、session_start()を使用します。 2。配列を作成し、$ _Sessionで保存します。 3. $ _Sessionを介して配列を取得します。 4.セッションデータを最適化してパフォーマンスを向上させます。

Garbage CollectionはPHPセッションでどのように機能しますか?Garbage CollectionはPHPセッションでどのように機能しますか?Apr 27, 2025 am 12:19 AM

PHPセッションガベージコレクションは、有効期限が切れたセッションデータをクリーンアップするために確率メカニズムを通じてトリガーされます。 1)構成ファイルにトリガー確率とセッションのライフサイクルを設定します。 2)Cronタスクを使用して、高負荷アプリケーションを最適化できます。 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衣類リムーバー

Video Face Swap

Video Face Swap

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

ホットツール

SublimeText3 Mac版

SublimeText3 Mac版

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

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

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

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

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