mysql メモリ テーブルを使用して php セッションを置き換える class_PHP チュートリアル
/**
@使用法: 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)
$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."
";
?>

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック











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

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

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

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

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

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

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

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