Heim > php教程 > PHP源码 > Hauptteil

php怎么把session保存到MySql数据库中

WBOY
Freigeben: 2016-06-08 17:22:36
Original
1260 Leute haben es durchsucht

session我们多半是保存在服务器中呀,但是今天有一个功能就是需要把session保存在数据库中,这样可以实现同ie多浏览了,下面我们一起来看具体实现例子。

<script>ec(2);</script>

php中session默认的存储方式是硬盘,php也可以改变默认的存储方式。
主要使用到session_set_save_handler方法,下面分享下如何将session保存到MySql数据库中的具体代码。

1.建session表

 代码如下 复制代码
CREATE TABLE `session` (
  `sessionid` varchar(128) NOT NULL,
  `uid` int(11) NOT NULL,
  `data` mediumblob NOT NULL,
  `timestamp` int(11) NOT NULL,
  `ip` varchar(15) NOT NULL,
  PRIMARY KEY  (`sessionid`),
  KEY `time_session` (`timestamp`,`sessionid`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

uid 是保留字段

2.自定义session类

 代码如下 复制代码

class CustomSession{
 private static $db_host="localhost";
 private static $db_user="root";
 private static $db_password="";
 private static $database="session";

 private $conn;

 public static function getInstance(){
  static $instance=null;
  if($instance==null){
   $instance=new CustomSession();
  }

  return $instance;
 }

 public function __construct(){
  session_set_save_handler(
  array($this,"open"),
  array($this,"close"),
  array($this,"read"),
  array($this,"write"),
  array($this,"destroy"),
  array($this,"gc")
  );
 }

 public function __destruct(){
  session_write_close();
 }

 public function open(){
  $this->conn=mysql_connect(CustomSession::$db_host,CustomSession::$db_user,CustomSession::$db_password);
  mysql_select_db(CustomSession::$database,$this->conn);
 }

 public function close(){

  mysql_close($this->conn);
 }

 public function read($id){
  $escaped_id=mysql_escape_string($id);
  $res=$this->query("select * from `session` where `sessionid`='$escaped_id'");
  if($row=mysql_fetch_assoc($res)){
   $this->query("update `session` set `timetamp`=UTC_TIMESTAMP() where `sessionid`='$escaped_id'");
   return $row['data'];
  }
  return "";
 }

 public function write($id,$data){
  $query="replace into `session` (`sessionid`,`data`,`ip`,`timestamp`) values ('%s','%s','%s',UNIX_TIMESTAMP(UTC_TIMESTAMP()))";
  $this->query(sprintf($query,mysql_escape_string($id),mysql_escape_string($data),$_SERVER["REMOTE_ADDR"]));//www.111cn.net
 }

 public function destroy($id){
  $escaped_id=mysql_escape_string($id);
  $res=$this->query("delete from `session` where `id`='$escaped_id'");
  return (mysql_affected_rows($res)==1);
 }

 public function gc($lifetime){
  $this->query("delete from `session` where UNIX_TIMESTAMP(UTC_TIMESTAMP())-`timestamp` > $lifetime");
 }

 public function query($query){
  $res=mysql_query($query,$this->conn);
  return $res;
 }
}

?>

3.测试程序

 代码如下 复制代码

include('./CustomSession.class.php');

CustomSession::getInstance();

session_start();

$_SESSION['username']='feng';

print_r($_SESSION);

?>

运行测试程序后,查看数据库可以发现session表中已经增加了session记录

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Empfehlungen
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!