程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> ThinkPHP實現將SESSION存入MYSQL的方法,thinkphpmysql

ThinkPHP實現將SESSION存入MYSQL的方法,thinkphpmysql

編輯:關於PHP編程

ThinkPHP實現將SESSION存入MYSQL的方法,thinkphpmysql


本文以實例講解了ThinkPHP實現將SESSION存入MYSQL的方法,所采用的運行環境是ThinkPHP3.1.2版

首先index.php中設置為:

<?php
define('APP_DEBUG', true);//設置為調試模式
require '../ThinkPHP/ThinkPHP.php';//設置入口文件
ini_set("session.save_handler", "user");//設置PHP的SESSION由用戶定義

在config.php中設置為:

<?php
return array(//'配置項'=>'配置值'
      // 添加數據庫配置信
  'SHOW_PAGE_TRACE' =>true,
  'DB_TYPE'  => 'mysql', // 數據庫類型
  'DB_HOST'  => 'localhost', // 服務器地址
  'DB_NAME'  => 'thinkphp', // 數據庫名
  'DB_USER'  => '你的用戶名', // 用戶名
  'DB_PWD'  => '你的密碼', // 密碼
  'DB_PORT'  => 3306, // 端口
  'DB_PREFIX' => 'think_', // 數據庫表前綴綴
'SESSION_OPTIONS'=>array(
    'type'=> 'db',//session采用數據庫保存
    'expire'=>1440,//session過期時間,如果不設就是php.ini中設置的默認值
  ),
'SESSION_TABLE'=>'think_session', //必須設置成這樣,如果不加前綴就找不到數據表,這個需要注意
);
?>

數據庫設置采用SessionDb.class.php中的DDL,不過後面加了ENGINE=MyISAM DEFAULT CHARSET=utf8

CREATE TABLE think_session (
    session_id varchar(255) NOT NULL,
    session_expire int(11) NOT NULL,
    session_data blob,
    UNIQUE KEY `session_id` (`session_id`)
  )ENGINE=MyISAM DEFAULT CHARSET=utf8;

現在訪問你的 index.php 後再在 phpmyadmin 中找到 think_session 表,我們會驚喜的發現多了條數據。
至此問題搞定。其他不要設置了,SessionDb.class.php會自動加載.

這樣ThinkPHP的調用

session('session_name','session_value')

系統就會自動把這個session存儲上面創建的數據庫中。


探討怎把session存入數據庫

建立數據庫和數據庫的表結構,我們可以采用php可以使用的任何的數據庫,因為php和mysql的結合最好,我就使用mysql來做事例,當然根據你的需要可以改稱別的數據庫,同時因為mysql沒有事物的功能,這也比別的數據庫更快,然而保存session 書、一 不許要事物處理的,再者裡我決的更好。
創建數據庫:
復制代碼 代碼如下:CREATE DATABASE 'session'; 創建表結構 CREATE TABLE 'session'( id CHAR(30) NOT NULL , 'user 'CHAR(30), data CHAR(3000) ,PARMIRY BY ('id') );
下面我們來編寫保存session的文件session_start.php
復制代碼 代碼如下:<?php
$con =mysql_connection("127.0.0.1","user" , "pass");
mysql_select_db("session");
function open($save_path, $session_name){return(true);}function close(){return(true);}function read($id){if($result = mysql_query("SELECT * FROM session WHERE id='$id'")){if($row = mysql_felth_row($result ))
{ return $row["data"]; }}else{return "";}}function write($id, $sess_data){if($result = mysql_query("UPDATE session SET data='$sess_data' WHERE id='$id'")){return true;}else{return false;}}function destroy($id){if($result = mysql_query("DELETE * FROM session WHERE id='$id'")){return true;}else{return false;}}/*********************************************
* WARNING - You will need to implement some *
* sort of garbage collection routine here. *
*********************************************/
function gc($maxlifetime){return true;}session_set_save_handler("open", "close", "read", "write", "destroy", "gc");
session_start();
/&#......余下全文>>
 

怎驗證存入數據庫的session_id?

在你後台的公共模塊裡面寫一個方法,該方法的作用就是將產生的session_id與數據庫的session_id比對,如果相同,說明已經登錄,不過不同則沒有登錄。然後在需要驗證登錄的模塊中調用該方法即可。
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved