MySQLを使用してPHPにセッションを保存する方法
この記事の例では、PHP が MySQL を使用してセッションを保存する方法について説明します。皆さんの参考に共有してください。具体的な分析は次のとおりです。
この機能は多くの大規模システムで一般的に利用可能ですが、インターネット上にはあまり情報がありませんので、ここで共有する記事をまとめました。ファイルには多くの利点があります:
1) 分散システムに適しており、ファイルは 1 台のマシンにのみ保存できます
2) アクセス量が多いシステムに適しており、ファイルを使用する場合、各セッションはファイルに保存され、ディレクトリはスーパーになります。ディレクトリが大きい場合、セッション ファイルを見つけるのがより困難になります。
MySQL を使用してセッションを保存するには、まずセッション テーブルを作成する必要があります:
<?php $hostname_login = "localhost"; // Server address $username_login = "root"; // User name $password_login = ""; // Password // $data_name = "session"; // Database name $login = mysql_pconnect($hostname_login, $username_login, $password_login) or trigger_error(mysql_error(),E_USER_ERROR); $sql="SHOW DATABASES LIKE '".$data_name."'"; // If it is exist if($rs_table=mysql_query($sql,$login)) { if($rs_value=mysql_fetch_array($rs_table)) { echo "数据库已经存在!\n!"; exit(); } } $sql="CREATE DATABASE $data_name"; mysql_query($sql); // Crate database echo "数据库创建成功!\n"; mysql_select_db($data_name, $login); $sql="CREATE TABLE `sessions` ( `SessionKey` varchar(32) NOT NULL default '', `SessionArray` blob NOT NULL, `SessionExpTime` int(20) unsigned NOT NULL default '0', PRIMARY KEY (`SessionKey`), KEY `SessionKey` (`SessionKey`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8"; //新建数据库 sql语句 mysql_query($sql); echo "成功新建数据库表!"; ?>
ログイン後にコピー
MysqlSession クラスは次のとおりです:
<?php class MysqlSession { // 注意在有使用Session的页面。页面一定要顶格,页面开始处不能留空。 private $DB_SERVER = "localhost"; // 数据库服务器主机名 private $DB_NAME = ""; // 数据库名字 private $DB_USER = "root"; // MYSQL 数据库访问用户名 private $DB_PASS = ""; // MYSQL 数据库访问密码 private $DB_SELECT_DB = ""; //private $SESS_LIFE = 1440; // Session的最大使用时长,单位秒。 private $SESS_LIFE = 0; function MysqlSession (&$sessionDB) { //session_write_close(); $this->DB_NAME = &$sessionDB; $this->SESS_LIFE = get_cfg_var("session.gc_maxlifetime"); session_module_name('user'); session_set_save_handler( array(&$this, 'sess_open'), array(&$this, 'sess_close'), array(&$this, 'sess_read'), array(&$this, 'sess_write'), array(&$this, 'sess_destroy'), array(&$this, 'sess_gc') ); session_start(); } function sess_open($save_path, $session_name){ // 打开数据库连接 if (! $this->DB_SELECT_DB = mysql_pconnect($this->DB_SERVER, $this->DB_USER, $this->DB_PASS)) { echo "SORRY! MYSQL ERROR : Can't connect to $this->DB_SERVER as $DB_USER"; echo "MySQL Error: ", mysql_error(); die; } if (! mysql_select_db($this->DB_NAME, $this->DB_SELECT_DB)) { echo "SORRY! MYSQL ERROR : Unable to select database $this->DB_NAME"; die; } return true; } function sess_close() { return true; } function sess_read($SessionKey){ $Query = "SELECT SessionArray FROM sessions WHERE SessionKey = '".$SessionKey."' AND SessionExpTime > " . time(); // 过期不读取。 $Result = mysql_query($Query, $this->DB_SELECT_DB); if (list($SessionArray) = mysql_fetch_row($Result)) { return $SessionArray; } return false; } function sess_write($SessionKey, $VArray) { $SessionExpTime = time() + $this->SESS_LIFE; // 更新Session过期时间,Session过期时间 = 最后一次更新时间 + Session的最大使用时长 $SessionArray = addslashes($VArray); $Query = "INSERT INTO sessions (SessionKey,SessionExpTime,SessionArray) VALUES ('".$SessionKey."','".$SessionExpTime."','".$SessionArray."')"; $Result = mysql_query($Query, $this->DB_SELECT_DB); if (!$Result){ $Query = "UPDATE sessions SET SessionExpTime = '".$SessionExpTime."', SessionArray = '".$SessionArray."' WHERE SessionKey = '".$SessionKey."' AND SessionExpTime > " . time(); $Result = mysql_query($Query, $this->DB_SELECT_DB); } return $Result; } function sess_destroy($SessionKey) { $Query = "DELETE FROM sessions WHERE SessionKey = '".$SessionKey."'"; $Result = mysql_query($Query, $this->DB_SELECT_DB); return $Result; } function sess_gc($maxlifetime) { // 这个垃圾清除器系统调用。默认是1440秒清除一次。 //参数可以在PHP.ini里面设置。 $Query = "DELETE FROM sessions WHERE SessionExpTime < " . time(); $Result = mysql_query($Query, $this->DB_SELECT_DB); return mysql_affected_rows($this->DB_SELECT_DB); } } ?>
ログイン後にコピー
使用法: session_start が元々使用されていた場所は、$session = new MysqlSession () に置き換えます
注: データベースを含める前にこのプログラムを開いてください。メイン プログラムが終了する前にデータベースを閉じることはできません。閉じないとエラーが発生します。
この記事が皆様の PHP プログラミング設計に役立つことを願っています。
PHP が MySQL を使用してセッションを保存する方法に関するその他の記事については、PHP 中国語 Web サイトに注目してください。
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事
R.E.P.O.説明されたエネルギー結晶と彼らが何をするか(黄色のクリスタル)
3週間前
By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最高のグラフィック設定
3週間前
By 尊渡假赌尊渡假赌尊渡假赌
アサシンのクリードシャドウズ:シーシェルリドルソリューション
2週間前
By DDD
R.E.P.O.誰も聞こえない場合はオーディオを修正する方法
3週間前
By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:Myriseのすべてのロックを解除する方法
4週間前
By 尊渡假赌尊渡假赌尊渡假赌

ホットツール

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

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

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

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

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

ホットトピック
Gmailメールのログイン入り口はどこですか?
7476
15


CakePHP チュートリアル
1377
52


Steamのアカウント名の形式は何ですか
77
11


NYTの接続はヒントと回答です
19
31

