Home > Article > Backend Development > Store session in database
Sql statement code
CREATE TABLE sessions ( id CHAR(32) NOT NULL, data TEXT, last_accessed TIMESTAMP NOT NULL, PRIMARY KEY (id) );
Custom session processing code
<?php /** * Created by PhpStorm. * User: michaeldu * Date: 15/7/14 * Time: 下午2:57 */ $sdbc = NULL; function open_session() { global $sdbc; $sdbc = mysqli_connect('192.168.31.172', 'root', 'root', 'phpadvanced'); return true; } function close_session() { global $sdbc; return mysqli_close($sdbc); } function read_session($sid) { global $sdbc; $q = sprintf('SELECT data FROM sessions WHERE id="%s"', mysqli_real_escape_string($sdbc, $sid)); $r = mysqli_query($sdbc, $q); if (mysqli_num_rows($r) == 1) { list($data) = mysqli_fetch_array($r, MYSQLI_NUM); return $data; } else { return ''; } } function write_session($sid, $data) { global $sdbc; $q = sprintf('REPLACE INTO sessions (id, data) VALUES ("%s", "%s")', mysqli_real_escape_string($sdbc, $sid), mysqli_real_escape_string($sdbc, $data)); $r = mysqli_query($sdbc, $q); return true; } function destroy_session($sid) { global $sdbc; $q = sprintf('DELETE FROM session WHERE id="%s"', mysqli_real_escape_string($sdbc, $sid)); $r = mysqli_query($sdbc, $q); $_SESSION = array(); return true; } function clean_session($expire) { global $sdbc; $q = sprintf('DELETE FROM sessions WHERE DATE_ADD(last_accessed, INTERVAL %d SECOND) < NOW()', (int)$expire); $r = mysqli_query($sdbc, $q); return true; } session_set_save_handler('open_session', 'close_session', 'read_session', 'write_session', 'destroy_session', 'clean_session'); session_start();
Call code on a normal page
colour_blue <?php if(empty($_SESSION)) { $_SESSION['blah'] = 'umlaut'; $_SESSION['this'] = 3615684.45; $_SESSION['that'] = 'blue'; echo 'Session已存储'; } else { echo 'SESSION已存在, '.print_r($_SESSION, 1).''; } if(isset($_GET['logout'])) { session_destroy(); echo '会话结束'; } else { echo '登出'; } echo '会话数据: '.print_r($_SESSION, 1).''; ?>