memo

memo dayo.

セッションハンドラをDBに変更する

/*

DROP TABLE IF EXISTS t_session;

CREATE TABLE t_session (
 sess_index varchar(200) NOT NULL COLLATE utf8_bin
,sess_value text DEFAULT null COLLATE utf8_bin
,sess_life_time int(11) NOT NULL DEFAULT 0
,PRIMARY KEY (sess_index)
,KEY i_t_session_1 (sess_index, sess_life_time)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

 */

define('K_DB_HOST', '******');// mysql ip address
define('K_DB_USER', '******');// mysql user id
define('K_DB_PASS', '******');// mysql user password
define('K_DB_NAME', '******');// mysql schema name


// ==============================================
/**
 * @access    public
 * @param    string $save_path 使わないけどI/F必要
 * @param    string $sess_name 使わないけどI/F必要
 * @return    bool
 */
function db_sess_open ($save_path, $sess_name) {
    return True;
}
// ==============================================
/**
 * @access    public
 * @return    bool
 */
function db_sess_close () {
    return True;
}
// ==============================================
/**
 * @access    public
 * @param    string $sess_id セッションキー
 * @return    string
 */
function db_sess_read ($sess_id) {
    $rtn = '';

    $con = mysql_connect(K_DB_HOST , K_DB_USER, K_DB_PASS);
    mysql_select_db(K_DB_NAME, $con);

    $sql = '';
    $sql .= " SELECT";
    $sql .= "  sess_value";
    $sql .= " FROM";
    $sql .= "  t_session";
    $sql .= " WHERE";
    $sql .= "  sess_index = 'aaaaaa_" . mysql_real_escape_string($sess_id) . "'";
    $sql .= " AND";
    $sql .= "  sess_life_time >= " . time() . "";

    $rsl = mysql_query($sql , $con);

    if ($rsl !== false)  {
        while ($row = mysql_fetch_assoc($rsl)) {
            $rtn = '' . $row['sess_value'];
        }
    }

    mysql_close($con);

    return $rtn;
}
// ==============================================
/**
 * @access    public
 * @param    string $sess_id セッションキー
 * @param    string $sess_data セッション値
 * @return    bool
 */
function db_sess_write ($sess_id, $sess_data) {
    // get lifetime
    $int_expire = ini_get('session.gc_maxlifetime');
    $int_expire = (int)$int_expire;
    if ($int_expire <= 0) {
        $int_expire = (60 * 15);
    }

    $rtn = False;

    $con = mysql_connect(K_DB_HOST , K_DB_USER, K_DB_PASS);
    mysql_select_db(K_DB_NAME, $con);

    $sql  = '';
    $sql .= " REPLACE INTO t_session (";
    $sql .= "  sess_index";
    $sql .= " ,sess_value";
    $sql .= " ,sess_life_time";
    $sql .= " ) VALUES (";
    $sql .= "  'aaaaaa_" . mysql_real_escape_string($sess_id) . "'";
    $sql .= " ,'" . mysql_real_escape_string($sess_data) . "'";
    $sql .= " ," . (time() + $int_expire) . "";
    $sql .= " )";

    $rsl = mysql_query($sql , $con);

    $sql  = '';
    $sql .= " COMMIT";

    $rsl = mysql_query($sql , $con);

    mysql_close($con);

    $rtn = True;

    return $rtn;
}
// ==============================================
/**
 * @access    public
 * @param    string $sess_id セッションキー
 * @return    bool
 */
function db_sess_destroy ($sess_id) {
    $rtn = False;

    $con = mysql_connect(K_DB_HOST , K_DB_USER, K_DB_PASS);
    mysql_select_db(K_DB_NAME, $con);

    $sql  = '';
    $sql .= " DELETE FROM";
    $sql .= "  t_session";
    $sql .= " WHERE";
    $sql .= "  sess_index = 'aaaaaa_" . mysql_real_escape_string($sess_id) . "'";

    $rsl = mysql_query($sql , $con);

    $sql  = '';
    $sql .= " COMMIT";

    $rsl = mysql_query($sql , $con);

    mysql_close($con);

    $rtn = True;

    return $rtn;
}
// ==============================================
/**
 * @access    public
 * @param    string $max_life_time 使わないけどI/F必要
 * @return    bool
 */
function db_sess_gc ($max_life_time) {
    $rtn = False;

    $con = mysql_connect(K_DB_HOST , K_DB_USER, K_DB_PASS);
    mysql_select_db(K_DB_NAME, $con);

    $sql  = '';
    $sql .= " DELETE FROM";
    $sql .= "  t_session";
    $sql .= " WHERE";
    $sql .= "  sess_life_time < " . time() . "";

    $rsl = mysql_query($sql , $con);

    $sql  = '';
    $sql .= " COMMIT";

    $rsl = mysql_query($sql , $con);

    mysql_close($con);

    $rtn = True;

    return $rtn;
}
// ==============================================
if ((function_exists('db_sess_open') !== False) &&
    (function_exists('db_sess_close') !== False) &&
    (function_exists('db_sess_read') !== False) &&
    (function_exists('db_sess_write') !== False) &&
    (function_exists('db_sess_destroy') !== False) &&
    (function_exists('db_sess_gc') !== False) ) {

    ini_set('session.save_handler', 'user');

    session_set_save_handler(
         'db_sess_open'
        ,'db_sess_close'
        ,'db_sess_read'
        ,'db_sess_write'
        ,'db_sess_destroy'
        ,'db_sess_gc'
    );

}
// ==============================================