mysql を使用してセッションを保存する PHP コードを最適化する_PHP チュートリアル
以前に「SESSIONのカスタマイズ(2) - データベースの保存」と「Sessionを使わない理由」の2つの記事を書きました
しかし、後で両方とも問題があることに気づきました。前者の処理は実際にはほとんど役に立たず、セッションのリサイクルは個別に処理する必要があります。後者はデータベースを頻繁に操作するため、パフォーマンスに大きな問題が発生します。
この二日間で慎重に検討した結果、大まかな計画は提示しましたが、具体的で詳細なテストはありません。
1. セッション処理と統計を結合します。訪問者も記録されます。
2. データベースと Cookie を完全に使用して、セッション機能をシミュレートします。
3. セッションに対するユーザーの操作は、できる限り 1 つの SQL ステートメントで完了する必要があります。セッションが必要ない場合、クエリは 1 つだけです。
4. 効率化のため、セッションのリサイクルは統合されていませんが、インターフェイスが提供されており、呼び出しによって実装できます。
詳細な説明は省略し、暫定的にコードを示します。
sql
CREATE TABLE `*****_session` (
`sid` char(32) NOT NULL,
`uid` int(10) NOT NULL,
`username` char(32) NOT NULL,
`usertype` tinyint(1) NOT NULL、
`activetime` int(10) NOT NULL、
`expiry` int(10) NOT NULL、
`ip` char(15) NOT NULL、
`url` char( 80) NOT NULL、
`value` char(255) NOT NULL、
PRIMARY KEY (`sid`)
) ENGINE=MEMORY DEFAULT CHARSET=utf8;
php code
private $_sessionPrex= '';//セッションプレフィックス
private $_time = '';//現在時刻
private $_model = null;//データベース操作モデル
private $_expiry = 120 0;//セッション有効性time
private $_domain = '';//セッション スコープ
protected $isNew = 0;//操作アクション 0 更新 1 増加を決定
protected $session = array();// 1 つのセッション レコードに対応
public function __construct($options){
$this->setOptions($options);
if(empty($this->_time))$this->_time = time(); ['activetime'] = $this->_time;
}
public function start(){
_getSid();
}
public function set($key, $ value){
this->_setCookie( $this->_sessionPrex.'_sid',$this->session['sid'],$value); ',$this->session['uid'],$value);
->セッション['value']; $ other [$ key]; >セッション['値'][$key]){
}
}
public function gc($file,$time = 1200){
$lasttime = file_get_contents($file);
if($lasttime + $time_time){
file_put_contents($file,$this->_time);
return $this->_model->delete('activetime+expiry<'.$this->_time);
}
}
public destroy(){
$this->session['uid'] = 0;
$this->session['username'] = '';
$this->session['usertype'] = -1;
$this->session['expiry'] = $this->_expiry;
$this->session['value'] = array();
$this->_setCookie($this->_sessionPrex.'_sid',$this->session['sid'],$this->_expiry);
$this->_setCookie($this->_sessionPrex.'_uid',$this->session['uid'],$this->_expiry);
}
public function __destruct(){
$this->_save();
}
private function _save(){
$dbSession = $this->session;
$dbSession['value'] = serialize($dbSession['value']);
if(strlen($dbSession['value'])>255)$this->_error('session->value が長すぎます!');
if($this->isNew == 1){
//增加
$this->model->insert($dbSession);
}else{
//更新
$sid = $dbSession['sid'];
$this->_model->update(array_slice($dbSession,1),'sid=''.$sid.'');
}
}
private function _getSession($sid){
$dbSession = $this->_model->detail('sid = ''.$sid.''');
if(!$dbSession)return false;
$dbSession['value'] = unserialize($dbSession['value']);
$this->session = array_merge($dbSession,$this->session);
true を返します。
}
private function _getSid(){
$sid = strip_tags($_COOKIE[$this->_sessionPrex.'_sid']);
if(strlen($sid)==32){
if($this->_getSession($sid)){
return true;
}
}else{
$sid = md5(time().mt_rand(1000,10000));
$this->_setCookie($this->_sessionPrex.'_sid',$sid);
}
$this->_setCookie($this->_sessionPrex.'_uid',0);
$this->session = array(
'uid' => 0,
'username' => '',
'usertype ' => -1,
'アクティブタイム' => $this-> ;_time,
'ip' => $this->_getip(),
'url' =>tags($_SERVER['REQUEST_URI']),
'有効期限' =>$this->_expiry ,
'value' => array()
);
$this->isNew = 1;
$this->session['sid'] = $sid;
}
private function _setCookie($name,$value,$expiry=0){
if(empty($expiry))$expiry = $this->_expiry;
if(empty($this->_domain)){
setcookie($name,$value,$this->_time + $expiry,'/');
}else{
setcookie($name,$value,$this->time + $expiry,'/',$this->_domain);
}
}
プライベート 関数 _getip(){
return getip();
}
private function _setOptions($options){
foreach ($options as $key=>$value){
if(in_array($key,array('sessionPrex','time','model','有効期限','ドメイン'))){
$key = '_'.$key;
$this->$key = $value;
}
}
}
private function _error($msg){
throw new Phpbean_Exception($msg);
}
}
?>
(注意、この代価は直接使用できません、本文は主に一思路を提供します)

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

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

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

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

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

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

ホットトピック











PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

MySQL 8.4 (2024 年時点の最新の LTS リリース) で導入された主な変更の 1 つは、「MySQL Native Password」プラグインがデフォルトで有効ではなくなったことです。さらに、MySQL 9.0 ではこのプラグインが完全に削除されています。 この変更は PHP および他のアプリに影響します

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます

文字列は、文字、数字、シンボルを含む一連の文字です。このチュートリアルでは、さまざまな方法を使用してPHPの特定の文字列内の母音の数を計算する方法を学びます。英語の母音は、a、e、i、o、u、そしてそれらは大文字または小文字である可能性があります。 母音とは何ですか? 母音は、特定の発音を表すアルファベットのある文字です。大文字と小文字など、英語には5つの母音があります。 a、e、i、o、u 例1 入力:string = "tutorialspoint" 出力:6 説明する 文字列「TutorialSpoint」の母音は、u、o、i、a、o、iです。合計で6元があります

あなたが経験豊富な PHP 開発者であれば、すでにそこにいて、すでにそれを行っていると感じているかもしれません。あなたは、運用を達成するために、かなりの数のアプリケーションを開発し、数百万行のコードをデバッグし、大量のスクリプトを微調整してきました。

PHPがMySQLに接続した後、ページは空白になり、DIE()関数が失敗する理由。 PHPとMySQLデータベースの間の接続を学習するとき、あなたはしばしばいくつかの混乱することに遭遇します...

CMSはコンテンツマネジメントシステムの略称です。これは、ユーザーが高度な技術知識を必要とせずにデジタル コンテンツを作成、管理、変更できるようにするソフトウェア アプリケーションまたはプラットフォームです。 CMS を使用すると、ユーザーはコンテンツを簡単に作成および整理できます
