ホームページ php教程 php手册 保存SESSION到SQLITE,

保存SESSION到SQLITE,

Jun 06, 2016 pm 07:38 PM
s session sqlite 保存

保存SESSION到SQLITE Save Session ThinkPHP ?php/** * Sqlite保存SESSION * @author WeakSun 52132522@qq.com */namespace Think\Session\Driver;use SessionHandlerInterface;use PDO;class Sqlite implements SessionHandlerInterface {static protected $

保存SESSION到SQLITE Save Session ThinkPHP
<?php
/**
 * Sqlite保存SESSION
 * @author WeakSun <52132522@qq.com>
 */
namespace Think\Session\Driver;

use SessionHandlerInterface;
use PDO;

class Sqlite implements SessionHandlerInterface {

	static protected $tableNameName, $expire, $handler, $nowTime;

	public function __construct() {
		empty(static::$expire) && static::$expire = C('SESSION_EXPIRE', null, false) ? C('SESSION_EXPIRE') : ini_get('session.gc_maxlifetime');
		empty(static::$nowTime) && static::$nowTime = isset($GLOBALS['_beginTime']) ? $GLOBALS['_beginTime'] : microtime(true);
		empty(static::$tableNameName) && static::$tableNameName = C('SESSION_TABLE') ? C('SESSION_TABLE') : 'iSession';
		$dbFile = TEMP_PATH . 'Caches.tmp';
		$isCreate = is_file($dbFile);
		if (empty(static::$handler)) {
			static::$handler = new PDO("sqlite:{$dbFile}", null, null, array(PDO::ATTR_PERSISTENT => true));
			empty($isCreate) && $this->exec("PRAGMA encoding = 'UTF8';PRAGMA temp_store = 2;PRAGMA auto_vacuum = 0;PRAGMA count_changes = 1;PRAGMA cache_size = 9000;");
			$this->chkTable() || $this->createTable();
		}
	}

	/**
	 * 创建SessionID
	 * @return string
	 */
	public function create_sid() {
		return uniqid(sprintf('%08x', mt_rand(0, 2147483647)));
	}

	/**
	 * 打开session
	 * @param string $path
	 * @param string $name
	 * @return boolean
	 */
	public function open($path, $name) {
		return is_object(static::$handler);
	}

	/**
	 * 关闭Session
	 * @return boolean
	 */
	public function close() {
		return true;
	}

	/**
	 * 读取Session
	 * @param string $id
	 * @return string
	 */
	public function read($id = null) {
		$table = static::$tableNameName;
		$sth = static::$handler->query("SELECT `value` FROM `{$table}` WHERE `id`='{$id}' AND `expire` > strftime('%s','now') LIMIT 1", PDO::FETCH_NUM);
		if (!empty($sth)) {
			list($data) = $sth->fetch();
			unset($sth);
		} else {
			$data = '';
		}
		return $data;
	}

	/**
	 * 写入Session
	 * @param string $id
	 * @param string $data
	 * @return integer
	 */
	public function write($id = null, $data = null) {
		$table = static::$tableNameName;
		$expire = ceil(static::$expire + static::$nowTime);
		return $this->exec("REPLACE INTO `{$table}` VALUES('{$id}','{$data}',{$expire})");
	}

	/**
	 * 销毁Session
	 * @param string $id
	 * @return integer
	 */
	public function destroy($id = 0) {
		$table = static::$tableNameName;
		return $this->exec("DELETE FROM `{$table}` WHERE `id` = '{$id}'");
	}

	/**
	 * 垃圾回收
	 * @param string $expire
	 * @return integer
	 */
	public function gc($expire = 0) {
		$table = static::$tableNameName;
		return $this->exec("DELETE FROM `{$table}` WHERE `expire` < strftime('%s','now');VACUUM;");
	}

	/**
	 * 检查当前表是否存在
	 * @return bool 返回检查结果,存在返回True,失败返回False
	 */
	protected function chkTable() {
		return in_array(static::$tableNameName, $this->getTables());
	}

	/**
	 * 获取当前数据库的数据表列表
	 * @return array 返回获取到的数据表列表数组
	 */
	protected function getTables() {
		$tables = $data = array();
		$sth = $this->query("SELECT `name` FROM `sqlite_master` WHERE `type` = 'table' UNION ALL SELECT `name` FROM `sqlite_temp_master`");
		if (!empty($sth)) {
			while ($row = $sth->fetch(PDO::FETCH_NUM, PDO::FETCH_ORI_NEXT)) {
				$tables[] = $row[0];
			}
			unset($sth, $row);
		}
		return $tables;
	}

	/**
	 * 创建当前数据表
	 * @return integer 成功返回1,失败返回0
	 */
	protected function createTable() {
		$tableName = static::$tableNameName;
		return $this->exec("CREATE TABLE IF NOT EXISTS `{$tableName}` (`id` VARCHAR PRIMARY KEY ON CONFLICT FAIL NOT NULL COLLATE 'NOCASE',`value` TEXT NOT NULL,`expire` INTEGER NOT NULL);");
	}

	public function __call($method, $arguments) {
		if (method_exists(self::$handler, $method)) {
			return call_user_func_array(array(self::$handler, $method), $arguments);
		} else {
			E(__CLASS__ . ':' . $method . L('_METHOD_NOT_EXIST_'));
			return;
		}
	}

}
ログイン後にコピー
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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)

小紅書で透かしなしで写真を保存する方法 小紅書で透かしなしで写真を保存する方法 小紅書で透かしなしで写真を保存する方法 小紅書で透かしなしで写真を保存する方法 Mar 22, 2024 pm 03:40 PM

小紅書には誰でも自由に閲覧できる豊富なコンテンツがあり、毎日の退屈を解消し、自分自身を助けるためにこのソフトウェアを使用することができます。このソフトウェアを使用する過程で、時々さまざまな美しいものを見ることができます。写真を保存したいと思う人はたくさんいますが、しかし、保存された写真には透かしがあり、これは非常に影響力があります。誰もがここで透かしなしで写真を保存する方法を知りたがっています。エディターは必要な人のために方法を提供します。誰でも理解してすぐに使用できます。 1. 画像の右上隅にある「...」をクリックしてリンクをコピーします。 2. WeChat アプレットを開きます。 3. WeChat アプレットでサツマイモ ライブラリを検索します。 4. サツマイモ ライブラリに入り、取得することを確認します。リンク 5. 写真を取得して携帯電話のアルバムに保存します

Douyin動画をダウンロードして保存する方法 Douyin動画をダウンロードして保存する方法 Mar 29, 2024 pm 02:16 PM

1.Douyinアプリを開き、ダウンロードして保存したい動画を見つけて、右下隅の[共有]ボタンをクリックします。 2. 表示されるポップアップウィンドウで、2 行目の機能ボタンを右にスライドし、[ローカルに保存] を見つけてクリックします。 3. この時点で新しいポップアップ ウィンドウが表示され、ユーザーはビデオのダウンロードの進行状況を確認し、ダウンロードが完了するまで待つことができます。 4. ダウンロードが完了すると、[保存しました。アルバムに移動して表示してください] というメッセージが表示され、ダウンロードしたビデオがユーザーの携帯電話のアルバムに正常に保存されます。

PHP と SQLite を使用したユーザー権限とアクセス制御の実装 PHP と SQLite を使用したユーザー権限とアクセス制御の実装 Jul 29, 2023 pm 02:33 PM

PHP と SQLite を使用したユーザー権限とアクセス制御の実装 最新の Web アプリケーションでは、ユーザー権限とアクセス制御は非常に重要な部分です。適切な権限管理を行うと、許可されたユーザーのみが特定のページや機能にアクセスできるようになります。この記事では、PHP と SQLite を使用して基本的なユーザー権限とアクセス制御を実装する方法を学びます。まず、ユーザーとその権限に関する情報を保存する SQLite データベースを作成する必要があります。以下は簡単なユーザーテーブルと権限テーブルの構造です。

セッション失敗を解決する方法 セッション失敗を解決する方法 Oct 18, 2023 pm 05:19 PM

セッション障害は通常、セッションの有効期間の期限切れまたはサーバーのシャットダウンによって発生します。解決策: 1. セッションの有効期間を延長する; 2. 永続ストレージを使用する; 3. Cookie を使用する; 4. セッションを非同期的に更新する; 5. セッション管理ミドルウェアを使用する。

PHP と SQLite: データの圧縮と暗号化を行う方法 PHP と SQLite: データの圧縮と暗号化を行う方法 Jul 29, 2023 am 08:36 AM

PHP と SQLite: データを圧縮および暗号化する方法 多くの Web アプリケーションでは、データのセキュリティとストレージ領域の使用率が非常に重要な考慮事項です。 PHP と SQLite は非常に広く使用されている 2 つのツールであり、この記事ではこれらをデータ圧縮と暗号化に使用する方法を紹介します。 SQLite は、別個のサーバー プロセスを持たず、アプリケーションと直接対話する軽量の組み込みデータベース エンジンです。 PHP は、動的スクリプトを構築するために広く使用されている人気のあるサーバー側スクリプト言語です。

PHP セッションのクロスドメイン問題の解決策 PHP セッションのクロスドメイン問題の解決策 Oct 12, 2023 pm 03:00 PM

PHPSession のクロスドメイン問題の解決策 フロントエンドとバックエンドの分離の開発では、クロスドメイン要求が標準になっています。クロスドメインの問題に対処するときは、通常、セッションの使用と管理が必要になります。ただし、ブラウザーのオリジンポリシーの制限により、デフォルトではセッションをドメイン間で共有できません。この問題を解決するには、いくつかの技術と方法を使用して、セッションのクロスドメイン共有を実現する必要があります。 1. ドメイン間でセッションを共有するための Cookie の最も一般的な使用法

動画アカウントの動画をフォトアルバムに保存するにはどうすればよいですか?メソッドの共有 動画アカウントの動画をフォトアルバムに保存するにはどうすればよいですか?メソッドの共有 Mar 26, 2024 am 11:21 AM

ビデオ アカウントは、ユーザーが自分のビデオを撮影、編集、共有できる人気のショートビデオ アプリケーションです。ただし、これらの素晴らしいビデオをフォト アルバムに保存して、必要なときにいつでも見返せるようにしたい場合があります。そこで、次にビデオアカウントのビデオをアルバムに保存する方法をいくつか紹介します。動画は、Video Number アプリケーションの組み込み機能を通じて保存できます。アプリを開いて、保存したい動画を見つけます。ビデオの右下隅にあるオプションアイコンをクリックすると、メニューが表示されるので、「アルバムに保存」を選択します。これにより、ビデオが携帯電話のフォトアルバムに保存されます。方法 2 は、スクリーンショットを撮ってビデオを保存することです。この方法は比較的簡単ですが、保存された画像にはビデオ コントロール バーなどの要素が含まれるため、十分に純粋ではありません。あなた

PHP と SQLite: 長時間の接続、切断と再接続に対処する方法 PHP と SQLite: 長時間の接続、切断と再接続に対処する方法 Jul 29, 2023 am 09:05 AM

PHP と SQLite: 長時間の接続、切断と再接続に対処する方法 はじめに: Web 開発では、PHP と SQLite はよく使用される 2 つのテクノロジです。ただし、長時間の接続や切断と再接続は、PHP や SQLite を使用するときによく発生する問題の一部です。この記事では、PHP での長時間の接続、切断と再接続の問題に対処する方法を紹介し、開発者がこれらの問題をよりよく理解して解決するのに役立ついくつかのサンプル コードを提供します。 1. 永続的な接続の問題 PHP を使用して SQLite データベースに接続すると、接続が長くなる (永続的)

See all articles