目次
PHP で session_set_save_handler() 関数を使用して、セッションを MySQL データベース インスタンス sessionhandler に保存します
データベースを使用して PHP を実装し、セッションの詳細を保存する方法??
PHPのセッション保存の問題
ホームページ バックエンド開発 PHPチュートリアル PHP で session_set_save_handler() 関数を使用してセッションを MySQL データベース インスタンスに保存する (sessionhandler_PHP チュートリアル)

PHP で session_set_save_handler() 関数を使用してセッションを MySQL データベース インスタンスに保存する (sessionhandler_PHP チュートリアル)

Jul 13, 2016 am 10:14 AM
handler mysql php save session set データベース

PHP で session_set_save_handler() 関数を使用して、セッションを MySQL データベース インスタンス sessionhandler に保存します

PHP はデフォルトでセッションをファイルの形式で保存します。これはファイルスペースのオーバーヘッドが非常に小さい Windows でのみ使用できますが、uinx または liux でファイルシステムを使用する場合は、次のようにファイルシステムのファイルスペースのオーバーヘッドが発生します。ただし、セッションは常に使用する必要があるため、多数のセッション ファイルが作成され、サーバー全体にパフォーマンスの問題が発生します。

一方、サーバーがクラスター方式を採用している場合、セッションの一貫性が保てないため、このように、サーバーが何台同時に使用されても、データベースを使用してセッションを保存することができます。セッションが保存されている限り、データベース サーバーはセッションの整合性を保証できます。実装方法の詳細については、以下をお読みください。

PHP はデフォルトでセッションをファイル形式で保存します。PHP 設定ファイル PHP.ini に次の行があります。

コードをコピーします コードは次のとおりです:
session.save_handler="ファイル"

これは、セッションがファイルに保存されることを意味します。データベースに保存したい場合は、ユーザーモードに変更して
に変更する必要があります。
コードをコピーします コードは次のとおりです:
session.save_handler="使用"

それは問題ありませんが、これはセッションを保存するためにファイルを使用しないことを意味するだけであり、データベースを選択してデータベース テーブルを作成する必要もあります。
データベースとデータベースのテーブル構造を確立するには、PHP が使用できる任意のデータベースを使用できます。PHP と mysql の組み合わせが最適であるため、例として mysql を使用します。もちろん、名前は変更できます。必要に応じて別のデータベースに移動します。

データベースを作成する

コードをコピーします コードは次のとおりです:
データベース「セッション」を作成します;


テーブル構造を作成する
コードをコピーします コードは次のとおりです:
create table 'session'( id char(32) not null , 'user 'char(30), data char(3000) ,主キー ('id') );


PHP セッションを保存し、PHP ファイルを書き込みます
コードをコピーします コードは次のとおりです:
$con = mysql_connect("127.0.0.1", "ユーザー" , "パス");
mysql_select_db("セッション");
関数 open($save_path, $session_name) {
return(true);
}
関数 close() {
return(true);
}
関数読み取り($id) {
if ($result = mysql_query("select * from session where id='$id'")) {
if ($row = mysql_felth_row($result)) {
$row["data"] を返します;
}
} その他 {
"" を返します;
}
}
関数 write($id, $sess_data) {
if ($result = mysql_query("update session set data='$sess_data' where id='$id'")) {
true を返します;
} その他 {
false を返します;
}
}
関数 destroy($id) {
if ($result = mysql_query("delete * from session where id='$id'")) {
true を返します;
} その他 {
false を返します;
}
}
関数 gc($maxlifetime) {
true を返します;
}
session_set_save_handler("open", "close", "read", "write", "destroy", "gc");
session_start();
// 通常通りセッションの使用に進みます

session_user_start.php として保存します。

これで、セッションを使用する必要がある場合に session_user_start.php を含める限り、このファイルをファイルの最初の行に含める必要があることに注意してください。 file セッションと同じメソッドを使用するだけです。

上記は単なるチュートリアルです。実際のアプリケーションでは、より専門的にパッケージ化できます。

SessionMysql.class.php


コードをコピーします コードは次のとおりです:

/**
* SessionMysql データベース ストレージ クラス
​*/

define('IN_QIAN') または exit('Access Denied');

クラスSessionMysql {

public $lifetime = 1800; // 有効期間、単位: 秒 (s)、デフォルトは 30 分
パブリック $db;
パブリック $テーブル;

/**
* コンストラクター
​*/
パブリック関数 __construct() {
$this->db = Base::loadModel('SessionModel');
$this->lifetime = Base::loadConfig('system', 'session_lifetime');
Session_set_save_handler(
array(&$this, 'open'), // session_start()の実行時に実行
Array(&$this, 'close'), // スクリプトの実行が完了するか、session_write_close() または session_destroy() が呼び出されたときに実行されます。つまり、すべてのセッション操作が完了した後に実行されます
Array(&$this, 'read'), // session_start() の実行時に実行されます。session_start のときに、現在のセッション データが読み取られるためです
Array(&$this, 'write'), // このメソッドはスクリプトの終了時に実行され、session_write_close() が SESSION データの送信を強制するために使用されます
array(&$this, 'destroy'), // session_destroy() 実行時に実行
Array(&$this, 'gc') // 実行確率は、session.gc_probability と session.gc_divisor の値によって決まります。タイミングは、open、read の後、Session_start が open、read、gc を順番に実行します。
);
Session_start(); // セッションを開くには、session_set_save_handler の後に実行する必要があります。 }
/**
  * session_set_save_handler を開く方法
  *
  * @param $savePath
  * @param $セッション名
  * @return true
 */
パブリック関数 open($savePath, $sessionName) {
true を返します;
}
/**
  * session_set_save_handler を閉じる方法
  *
  * @return bool
 */
パブリック関数 close() {
$this->gt;gc($this->lifetime);
を返します }
/**
* session_id を読み取ります
*
* session_set_save_handler 読み取りメソッド
* @return string read session_id
​*/
パブリック関数 read($sessionId) {
$condition = 配列(
'どこ' => 配列(
'セッションID' => $セッションID
)、
「フィールド」 => 「データ」
);
$row = $this->db->fetchFirst($condition);
$row を返しますか? $row['data'] : '';
}
/**
* session_idの値を書きます
*
* @param $sessionId セッションID
* @param $data 値
* @return 混合クエリの実行結果
​*/
パブリック関数 write($sessionId, $data) {
$userId = isset($_SESSION['userId']) $_SESSION['userId'] : 0;
$roleId = isset($_SESSION['roleId']) $_SESSION['roleId'] : 0;
$grouId = isset($_SESSION['grouId']) $_SESSION['grouId'] : 0;
$m = 定義済み('ROUTE_M') ROUTE_M : '';
$c = 定義済み('ROUTE_C') ROUTE_C : '';
$a = 定義済み('ROUTE_A') ROUTE_A : '';
if (strlen($data) > 255) {
$data = '';
}
$ip = get_ip();
$sessionData = array(
'session_id' => $セッションID,
; 'user_id' => $userId,
; 'ip' => $ip,
'last_visit' => SYS_TIME、
'role_id' => $roleId,
; 'グループID' => $grouId,
'm' => $m,
'c' => $c,
'a' => $a,
'データ' => $data,
);
$this->db->insert($sessionData, 1, 1);
を返す }
/**
* 指定されたsession_idを削除します
*
* @param string $sessionId セッションID
* @return bool
​*/
パブリック関数 destroy($sessionId) {
Return $this->db->delete(array('session_id' => $sessionId));
}
/**
* 期限切れのセッションを削除します
*
* @param $lifetime セッション有効期間(単位:秒)
* @return bool
​*/
パブリック関数 gc($lifetime) {
$expireTime = SYS_TIME - $lifetime;
Return $this->db->delete("`last_visit`<$expireTime");
}
}

システム ファイルのどこかでこのクラスをインスタンス化するだけです。

コードをコピーします コードは次のとおりです:

新しいSessionMysql();

データベースを使用して PHP を実装し、セッションの詳細を保存する方法??

この記事で紹介した関連する方法やテクニックを通じて、この知識を完全にマスターしていただければ幸いです。 PHP $con =mysql_connection("127.0.0.1","user" , "pass"); mysql_select_db("session"); function open($save_path, $session_name) { return(true); (true); } function read($id) { if($result = mysql_query("select * from session where id='$id'")){ if($row = mysql_felth_row($result )) { return $row ["データ"]; } } else { return ""; } } function write($id, $sess_data) { if($result = mysql_query("update session set data='$sess_data' where id='$id' ")) { return true; } else { return false; } } function destroy($id) { if($result = mysql_query("delete * from session where id='$id'")){ return true; } else { return false; } } function gc($maxlifetime) { return true } session_set_save_handler("open", "close", "write", "destroy", "gc"); //通常通りセッションを使用しますか?

PHPのセッション保存の問題

php はデフォルトでセッションをファイル形式で保存します。これはファイルスペースのオーバーヘッドが非常に小さい Windows でのみ使用できますが、uinx または liux でファイルシステムを使用する場合は、次のようにファイルシステムのファイルスペースオーバーヘッドが発生します。ただし、セッションは常に使用する必要があるため、サーバー全体にパフォーマンスの問題が発生します。この方法では、セッションの一貫性を維持できないため、データベース メソッドを使用してセッションを保存する必要があります。この方法では、同時に使用されるサーバーの数に関係なく、セッションを 1 つのデータベース サーバーに保存できます。セッションは完了しました。実装方法の詳細については、読み続けてください。
デフォルトでは、PHP セッションはファイルを使用して保存されます。PHP 設定ファイル php.ini, session.save_handler="files" に次のような行が表示されます。これは、セッションの保存にファイルが使用されることを意味します。データベースを使用して保存したい場合は、ユーザー モードに変更し、名前を session.save_handler="use" に変更する必要があります。ただし、これは、セッションの保存にファイルを使用しないことを意味するだけです。また、データベースを選択する必要もあります。 . データベーステーブルを作成します。
データベースとデータベースのテーブル構造を確立するには、PHP と MySQL の組み合わせが最適なので、PHP で使用できるデータベースを使用できます。もちろん、名前は変更できます。同時に、Mysql にはトランザクション機能がないため、他のデータベースよりも高速ですが、セッションの保存にはトランザクション処理が必要ないため、この方が優れていると思います。
データベースの作成、CREATE DATABASE 'session'; テーブル構造の作成 CREATE TABLE 'session'( id CHAR(30) NOT NULL , 'user 'CHAR(30), data CHAR(3000) ,PARMIRY BY ('id') );
phpファイルを書く
$con =mysql_connection("127.0.0.1","user" , "pass");
mysql_select_db("session");
function open($save_path, $session_name)
{
return(true);
}
function close()
{
return(true);
}
function read($id)
{
if($result = mysql_query("SELECT * FROM session WHERE id='$ id'"))
{
if($row = mysql_felth_row($result ))
{ return $row["data"]; }
}
else
{
return "";
}
}
function write( $id, $sess_data)
{
if($result = mysql_query("UPDATE session SET data='$sess_data...残りのテキスト>>

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/907278.html技術記事 PHP の session_set_save_handler() 関数を使用して、セッションを MySQL データベース インスタンスに保存します。PHP は、デフォルトではセッションをファイル形式で保存します。
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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衣類リムーバー

AI Hentai Generator

AI Hentai Generator

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

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

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

MySQLユーザーとデータベースの関係 MySQLユーザーとデータベースの関係 Apr 08, 2025 pm 07:15 PM

MySQLデータベースでは、ユーザーとデータベースの関係は、アクセス許可と表によって定義されます。ユーザーには、データベースにアクセスするためのユーザー名とパスワードがあります。許可は助成金コマンドを通じて付与され、テーブルはCreate Tableコマンドによって作成されます。ユーザーとデータベースの関係を確立するには、データベースを作成し、ユーザーを作成してから許可を付与する必要があります。

RDS MySQL Redshift Zero ETLとの統合 RDS MySQL Redshift Zero ETLとの統合 Apr 08, 2025 pm 07:06 PM

データ統合の簡素化:AmazonrdsmysqlとRedshiftのゼロETL統合効率的なデータ統合は、データ駆動型組織の中心にあります。従来のETL(抽出、変換、負荷)プロセスは、特にデータベース(AmazonrdsmysQlなど)をデータウェアハウス(Redshiftなど)と統合する場合、複雑で時間がかかります。ただし、AWSは、この状況を完全に変えたゼロETL統合ソリューションを提供し、RDSMYSQLからRedshiftへのデータ移行のための簡略化されたほぼリアルタイムソリューションを提供します。この記事では、RDSMysQl Zero ETLのRedshiftとの統合に飛び込み、それがどのように機能するか、それがデータエンジニアと開発者にもたらす利点を説明します。

MySQL:初心者向けのデータ管理の容易さ MySQL:初心者向けのデータ管理の容易さ Apr 09, 2025 am 12:07 AM

MySQLは、インストールが簡単で、強力で管理しやすいため、初心者に適しています。 1.さまざまなオペレーティングシステムに適した、単純なインストールと構成。 2。データベースとテーブルの作成、挿入、クエリ、更新、削除などの基本操作をサポートします。 3.参加オペレーションやサブクエリなどの高度な機能を提供します。 4.インデックス、クエリの最適化、テーブルパーティション化により、パフォーマンスを改善できます。 5。データのセキュリティと一貫性を確保するために、バックアップ、リカバリ、セキュリティ対策をサポートします。

MySQLのユーザー名とパスワードを入力する方法 MySQLのユーザー名とパスワードを入力する方法 Apr 08, 2025 pm 07:09 PM

MySQLのユーザー名とパスワードを入力するには:1。ユーザー名とパスワードを決定します。 2。データベースに接続します。 3.ユーザー名とパスワードを使用して、クエリとコマンドを実行します。

MySQLのクエリ最適化は、特に大規模なデータセットを扱う場合、データベースのパフォーマンスを改善するために不可欠です MySQLのクエリ最適化は、特に大規模なデータセットを扱う場合、データベースのパフォーマンスを改善するために不可欠です Apr 08, 2025 pm 07:12 PM

1.正しいインデックスを使用して、データの量を削減してデータ検索をスピードアップしました。テーブルの列を複数回検索する場合は、その列のインデックスを作成します。あなたまたはあなたのアプリが基準に従って複数の列からのデータが必要な場合、複合インデックス2を作成します2。選択した列のみを避けます。必要な列のすべてを選択すると、より多くのサーバーメモリを使用する場合にのみサーバーが遅くなり、たとえばテーブルにはcreated_atやupdated_atやupdated_atなどの列が含まれます。

NAVICATでデータベースパスワードを取得できますか? NAVICATでデータベースパスワードを取得できますか? Apr 08, 2025 pm 09:51 PM

NAVICAT自体はデータベースパスワードを保存せず、暗号化されたパスワードのみを取得できます。解決策:1。パスワードマネージャーを確認します。 2。NAVICATの「パスワードを記憶する」機能を確認します。 3.データベースパスワードをリセットします。 4.データベース管理者に連絡してください。

mysqlを表示する方法 mysqlを表示する方法 Apr 08, 2025 pm 07:21 PM

次のコマンドでmysqlデータベースを表示します。サーバーに接続します:mysql -u username -pパスワードrun showデータベース。すべての既存のデータベースを取得するコマンド[データベース]を選択します。データベース名を使用します。テーブルを表示:表を表示します。テーブル構造を表示:テーブル名を説明してください。データを表示:[テーブル名]から[ *]を選択します。

mysqlをコピーして貼り付ける方法 mysqlをコピーして貼り付ける方法 Apr 08, 2025 pm 07:18 PM

MySQLのコピーと貼り付けには、次の手順が含まれています。データを選択し、Ctrl C(Windows)またはCMD C(MAC)でコピーします。ターゲットの場所を右クリックして、貼り付けまたはCTRL V(Windows)またはCMD V(MAC)を使用します。コピーされたデータは、ターゲットの場所に挿入されるか、既存のデータを置き換えます(データが既にターゲットの場所に存在するかどうかに応じて)。

See all articles