セッション情報をデータベースで管理するサンプル

create database test;
use test;
create table TBL_SESSION (
SESSION_ID varchar(50) NOT NULL,
SESSION_DATA text,
CRA¥EATE_DATE int(10),
PRIMARY KEY (SESSION_ID));

class MySessionHandler implements SessionHandlerInterface {

	function close(){
		return true;
	}

	function destroy($session_id) {
		$db = get_db();
		if($stmt = $db->prepare("DELETE FROM TBL_SESSION WHERE SESSION_ID = ?")){
			$stmt->bind_param("s", $session_id);
			$stmt->execute();
			$stmt->close();
			$stmt = null;
		}
		$db->close();
		$db = null;
		return true;
	}

	function open($save_path, $name) {
		return true;
	}

	function read($session_id) {
		$session_data = "";
		$db = get_db();
		if($stmt = $db->prepare("SELECT SESSION_DATA FROM TBL_SESSION WHERE SESSION_ID = ?")){
			$stmt->bind_param("s", $session_id);
			$stmt->bind_result($session_data);
			$stmt->execute();
			$stmt->fetch();
			$stmt->close();
			$stmt = null;
		}
		$db->close();
		$db = null;

		if(is_null($session_data)){
			$session_data = "";
		}
		return $session_data;
	}

	function write($session_id, $sesion_data){
		$affect_rows = 0;
		$create_date = time();
		$db = get_db();
		if($stmt = $db->prepare("INSERT INTO TBL_SESSION (SESSION_ID, SESSION_DATA, CREATE_DATE) VALUES(?, ?, ?) ON DUPLICATE KEY UPDATE SESSION_DATA = ?, CREATE_DATE = ?")){
			$stmt->bind_param("ssisi", $session_id, $session_data, $create_date, $session_data, $create_date);
			$stmt->execute();
			$affected_rows = $stmt->affected_rows;
			$stmt->close();
			$stmt = null;
		}
		$db->close();
		$db = null;
		return $affected_rows ? true : false;
	}
}

function get_db(){
	return new mysqli('localhost:3306', 'user', 'password', 'db_name');
}

session_set_save_handler(new MySessionHandler(), true);

session_start();

$_SESSION['data'] = 0;

Railsは全てのセッション情報をcookieに保存