ホームページ バックエンド開発 PHPチュートリアル mysql メモリ テーブルを使用して php セッションを置き換える class_PHP チュートリアル

mysql メモリ テーブルを使用して php セッションを置き換える class_PHP チュートリアル

Jul 21, 2016 pm 03:48 PM
mysql php session som use 交換する コード メモリ コピー 使用 表面

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

/**
@使用法: php sessoin の代わりに他のストレージメソッド (mysql または memcache) を使用してください
@author:lein
@Version:1.0
*/
session_start();
if(!isset($_SESSION['test'])){
$_SESSION['test']="123_lein_".date("Y-m-d H:i:s");
}

クラスセッション{

//セッションデータ
private $data;
//engine、mysql または memcache
private $engine;
//php セッションの有効期限
private $sessionexpiredTime;
//現在のユーザーのセッション Cookie 値
private $sessionID;

パブリック関数 session($engineBase=NULL,$engineName='mysql',$storage_name='php_session'){
try{
$this->sessionexpiredTime = intval(ini_get("session.cache_expire"))*60 ;
}catch(Exception $Exception){
$this->sessionexpiredTime = 1200;
}
@session_start();
$this->sessionID=session_id();
$className = $engineName."SessionEngine";
$this->engine = new $className(
array(
'storage_name'=>$storage_name,//データを格納する mysql テーブル名または memcahce キー;
'expire_time'=>$this->sessionexpiredTime 、
'data_too_long_instead_value' => '{__データは *$* が長すぎます__}'
)、
$this->セッションID、
&$engineBase
);
$this->init();
$this->engine->refresh();
$this->engine->cleanup();
}
プライベート関数 init()
{
$this->data = $this->engine->get();
if(emptyempty($this->data)&&!emptyempty($_SESSION)){
$this->data = $_SESSION;
$this->engine->create(false, $this->data);
}
else if(emptyempty($this->data))
{
$this->engine->create(false, $this->data);
}
}
プライベート関数 __get($nm)
{
if (isset($this->data[$nm])) {
$r = $this->data[$nm];
$r を返す;
}
else
{
NULL を返す;
}
}
プライベート関数 __set($nm, $val)
{
$this->data[$nm] = $val;
$this->engine->set(false, $this->data);
}
function __destruct(){
$this->data = NULL;
$this->engine->close();
$this->engine = NULL;
}
}

interface SessionEngine
{
/*
* 変数の設定
* @param $arr array,array(variable name=>variable value,...)
*/
public function setVariable($arr) ;
/*
* セッション値を取得する
* @param $key string
*/
public function get($key="");
/*
* セッション値を設定します
* @param $key string
* @param $value string
*/
public function set($key="",$value="");
/*
* セッション値を設定します
* @param $key string
* @param $value string
*/
public function create($key="",$value="");
/*
* セッションの無効な時間を更新します
* @param $key string
*/
public functionfresh($key="");
/*
* mysql または memcache 接続を閉じる
*/
public function close();
/*
* 期限切れのセッションを削除
*/
public function cleanup();
}

final クラス mysqlSessionEngine は SessionEngine{
private $id=""; を実装します。
private $storage_name='php_session';
private $storage_name_slow='php_session_slow';
private $data_too_long_instead_value = '{__DATA IS ~ TO LONG__}';//データが $max_session_data_length より長く、mysql 4 以下を使用している場合は、代わりにこの値をメモリ テーブルに挿入します。
プライベート $expire_time=1200;
プライベート $max_session_data_length = 2048;
プライベート $conn;
プライベート $mysql_version;
パブリック関数 mysqlSessionEngine($arr=array(),$key="",&$_conn){
$this->setVariable($arr);
$this->id = $key;
if(emptyempty($this->id)||strlen($this->id)!=32){
throw new Exception(__FILE__."->".__LINE__.": セッションの Cookie 名は空ではなく、文字数は 32 文字だけでなければなりません!");
}
$this->conn = $_conn;
if(!$this->conn||!is_resource($this->conn)){
throw new Exception(__FILE__."->".__LINE__.": MySQL 接続が必要です!");
}
$this->mysql_version = $this->getOne("select Floor(version())");
if($this->mysql_version$this->max_session_data_length = 255;
}
}
public function setVariable($arr){
if(!emptyempty($arr)&&is_array($arr)){
foreach($arr as $k=>$v){
$this-> $k = $v;
if($k=='ストレージ名'){
$this->ストレージ名_slow = $v.'_slow';
}
}
}
}
public function get($key=""){
if($key=="") $key = $this->id;
$return = $this->getOne('select value from '.$this->storage_name.' where id="'.$key.'"');
if($return==$this->data_too_long_instead_value)
{
$return = $this->getOne('select value from '.$this->storage_name_slow.' where id="'.$key. '"');
}
if(!$return)
{
$mysqlError = mysql_error($this->conn);
if(strpos($mysqlError,"存在しません")!==false)
{
$this->initTable();
}
$return = array();
}
else
{
$return = unserialize($return);
}
return $return;
}
パブリック関数 close(){
@mysql_close($this->conn);
}
public function cleanup(){
if($this->mysql_version>4){
$sql = '.$this->storage_name から削除します。' while date_add(time,INTERVAL '.$this->expire_time.' SECOND)}else{
$sql = '.$this->storage_name.' から削除します。 while time+'.$this->expire_time.'}
$this->execute($sql);
}
public functionfresh($key=""){
if($this->mysql_version>4){
$sql = 'update '.$this->storage_name.' set time=CURRENT_TIMESTAMP() where id="'.$key.'"';
}else{
$sql = '.$this->storage_name.' を更新します。 set time=unix_timestamp() where id="'.$key.'"';
}
$return = $this->execute($sql);
if(!$return){
$this->initTable();
$return = $this->execute($sql,true);
}
return $return;
}
public function create($key="",$value=""){
if($key=="") $key = $this->id;
if($value != "") $value = mysql_real_escape_string(serialize($value),$this->conn);
if(strlen($value)>$this->max_session_data_length) throw new Exception(__FILE__."->".__LINE__.": セッション データが最大許容長 (".$this->max_session_data_length) を超えています.")!");
if($this->mysql_version>4){
$sql = '.$this->storage_name.' に置き換えます。 set value=''.$value.'',id="'.$key.'",time=CURRENT_TIMESTAMP()';
}else{
$sql = '.$this->storage_name.' に置き換えます。 set value=''.$value.'',id="'.$key.'",time=unix_timestamp()';
}
$return = $this->execute($sql);
if(!$return){
$this->initTable();
$return = $this->execute($sql,true);
}
return $return;
}
パブリック関数 set($key="",$value=""){
if($key=="") $key = $this->id;
if($value != "") $value = mysql_real_escape_string(serialize($value),$this->conn);
$sql = '更新'.$this->storage_name.' set value=''.$value.'' where id="'.$key.'"';
if(strlen($value)>$this->max_session_data_length)
{
if($this->mysql_version>4){
throw new Exception(__FILE__."->".__LINE__.": セッションデータが最大許容長を超えています(".$this->max_session_data_length.")!");
}
$sql = '.$this->storage_name_slow.' に置き換えます。 set value=''.$value.'',id="'.$key.'",time=unix_timestamp()';
$this->execute($sql,true);
$sql = '更新'.$this->storage_name.' set value=''.$this->data_too_long_instead_value.'' where id="'.$key.'"';
}
$return = $this->execute($sql);
if(!$return){
$this->initTable();
$return = $this->execute($sql,true);
}
return $return;
}
プライベート関数 initTable(){
if($this->mysql_version>4){
$sql = "
存在しない場合は CREATE TABLE `".$this->storage_name."` (
`id` char(32) NOT NULL デフォルト 'ERR'、
`value` VARBINARY(".$this->max_session_data_length.") NULL、
`time` タイムスタンプ NOT NULL デフォルト 更新時の CURRENT_TIMESTAMP CURRENT_TIMESTAMP、
PRIMARY KEY (`id` ),
KEY `time` (`time`)
) ENGINE=MEMORY
";
}else{
$sqlSlow = "
CREATE TABLE if not存在 `".$this->storage_name."_slow` (
`id` char(32) NOT NULL デフォルト 'ERR',
`value` text NULL ,
`time` int(10) not null デフォルト '0',
PRIMARY KEY (`id`),
KEY `time` (`time`)
) ENGINE=MyISAM
";
$this->execute($sqlSlow,true);

$sql = "
CREATE TABLE if not存在 `".$this->storage_name."` (
`id` char(32) NOT NULL デフォルト 'ERR',
`value` VARCHAR(255) NULL,
`time` int(10) not null デフォルト '0',
PRIMARY KEY (`id`),
KEY `time` (`time`)
) ENGINE=MEMORY
";
}
return $this->execute($sql,true);
}
プライベート関数execute($sql,$die=false)
{
if($die)
{
mysql_query($sql,$this->conn) または die("exe Sql error:
".mysql_error()."
".$sql."
");
}
else
{
mysql_query($sql,$this->conn);

if(mysql_error()){
return false;
}else{
true を返します。
}
}
}
プライベート関数 getOne($sql,$die=false){
$rs = $this->query($sql,$die);
if($rs && ($one = mysql_fetch_row($rs)) ){
return $one[0];
}else{
false を返す;
}
}
プライベート関数 query($sql,$die=false){
if($die)
$rs = mysql_query($sql,$this->conn) または die("クエリ SQL エラー:
"。 mysql_error()."
".$sql."
");
else
$rs = mysql_query($sql,$this->conn);
$rsを返します;
}
}

$lnk = mysql_connect('localhost', 'root', '123456')
or die ('接続されていません : ' .mysql_error());

// foo を現在のデータベースにする
mysql_select_db('test', $lnk) or die ('Can't use foo : ' . mysql_error());
$S = 新しいセッション($lnk);
if(!$S->last){
$S->last = time();
}
echo "「.$S->last」に初めて訪問しました。
";
if(!$S->lastv){
$S->lastv = 0;
}
$S->lastv++;
echo "lastv=".$S->lastv."
";
echo "test=".$S->test."
";
if(isset($_GET['max'])){
$S->boom = str_repeat("OK",255);
}
if(isset($_GET['ブーム'])){
$S->ブーム = $_GET['ブーム'];
}
echo "boom=".$S->boom."
";
?>

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/319803.html技術記事例: ?php /**@Usage: php sessoin @author:lein @Version:1.0 の代わりに、他のストレージ方法 (mysql または memcache) を使用してください。*/ session_start(); if(!isset($_SESSIO...
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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)

session_start()関数の重要性は何ですか? session_start()関数の重要性は何ですか? May 03, 2025 am 12:18 AM

session_start()iscrucialinphpformangingusersions.1)itInitiateSanewsessionifnoneExists、2)resumesanexistingsession、および3)SetSessionCookieforcontinuityAcrossRequests、ApplicationslicationSliviseSlikeUserauthicationAnticatent。

作曲家:PHP開発者のパッケージマネージャー 作曲家:PHP開発者のパッケージマネージャー May 02, 2025 am 12:23 AM

Composerは、PHPの依存関係管理ツールであり、Composer.jsonファイルを介してプロジェクトの依存関係を管理しています。 1)依存関係情報を取得するためのComposer.jsonを解析する。 2)依存関係を解析して、依存性ツリーを形成します。 3)PackagistからVendorディレクトリへの依存関係をダウンロードしてインストールします。 4)Composer.Lockファイルを生成して、依存関係バージョンをロックして、チームの一貫性とプロジェクトの保守性を確保します。

他のリレーショナルデータベースでMySQLを使用することの利点は何ですか? 他のリレーショナルデータベースでMySQLを使用することの利点は何ですか? May 01, 2025 am 12:18 AM

MySQLがさまざまなプロジェクトで広く使用されている理由には、次のものがあります。1。複数のストレージエンジンをサポートする高性能とスケーラビリティ。 2。使いやすく、メンテナンス、シンプルな構成とリッチツール。 3。豊富なエコシステム、多数のコミュニティとサードパーティのツールサポートを魅了します。 4。複数のオペレーティングシステムに適したクロスプラットフォームサポート。

MySQL vs. Oracle:ライセンスとコストの理解 MySQL vs. Oracle:ライセンスとコストの理解 May 03, 2025 am 12:19 AM

MySQLは、小規模およびオープンソースプロジェクトにGPLおよび商業ライセンスを使用しています。 Oracleは、高性能を必要とする企業に商用ライセンスを使用しています。 MySQLのGPLライセンスは無料で、商業ライセンスには支払いが必要です。 Oracleライセンス料は、プロセッサまたはユーザーに基づいて計算され、コストは比較的高くなります。

mysql vs. phpmyadmin:重要な違​​いを理解します mysql vs. phpmyadmin:重要な違​​いを理解します May 06, 2025 am 12:17 AM

MySQLはデータベース管理システムであり、PHPMyAdminはMySQLを管理するためのWebツールです。 1.MYSQLは、データを保存および管理するために使用され、SQL操作をサポートします。 2.PhpMyAdminは、データベース管理を簡素化するためのグラフィカルインターフェイスを提供します。

NavicatとMySQL:完璧なパートナーシップ NavicatとMySQL:完璧なパートナーシップ May 05, 2025 am 12:09 AM

NAVICATとMySQLは、データベース管理と開発効率を改善できるため、完全な一致です。 1.Navicatは、MySQL操作を簡素化し、グラフィカルインターフェイスとSQLステートメントの自動生成を介して作業効率を向上させます。 2.Navicatは、ローカルおよびリモートの管理を促進する複数の接続方法をサポートしています。 3.高度な使用に適した強力なデータ移行と同期機能を提供します。 4.Navicatは、パフォーマンスの最適化と、通常のバックアップやクエリの最適化などのベストプラクティスを支援します。

PHPパフォーマンス最適化戦略。 PHPパフォーマンス最適化戦略。 May 13, 2025 am 12:06 AM

phpapplicationscanbeoptimizedforspeedandEfficiencyby:1)enabingopcacheinphp.ini、2)PreparedStatementswithpordatabasequeriesを使用して、3)LoopswithArray_filterandarray_mapfordataprocessing、4)の構成ngincasaSearverseproxy、5)

MySQL:SQLの実用的なアプリケーション MySQL:SQLの実用的なアプリケーション May 08, 2025 am 12:12 AM

MySQLは、優れたパフォーマンスと使いやすさとメンテナンスのために人気があります。 1.データベースとテーブルの作成:createdatabaseとcreateTableコマンドを使用します。 2。挿入とクエリデータ:InsertIntoおよび選択ステートメントを介してデータを操作します。 3.クエリを最適化:インデックスを使用してステートメントを説明してパフォーマンスを向上させます。

See all articles