php session存数据库

这个sesison存到数据库很简单,就是根据session_id进行对数据库的CRUD操作,主要是用到了,session_set_save_handler这个方法,自定义session的执行方法,

首先创建数据表

 CREATE TABLE `sessions` (
  `session_id` varchar(255) NOT NULL,
  `session_expires` int(11) DEFAULT NULL,
  `session_data` text,
  PRIMARY KEY (`session_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

然后封装操作session的工具类:

<?php
//error_reporting(0);
class session {

   var $lifeTime;

   var $dbHandle;
   function open($savePath, $sessName) {

       $this->lifeTime = get_cfg_var("session.gc_maxlifetime");

       $dbHandle = mysql_connect("localhost","root","root");
       $dbSel = mysql_select_db("mysession",$dbHandle);

       if(!$dbHandle || !$dbSel)
           return false;
       $this->dbHandle = $dbHandle;
       return true;
   }
   function close() {
       $this->gc(ini_get('session.gc_maxlifetime'));

       return @mysql_close($this->dbHandle);
   }
   function read($sessID) {

       $res = mysql_query("SELECT session_data AS d FROM sessions
                           WHERE session_id = '$sessID'
                           AND session_expires > ".time(),$this->dbHandle);

       if($row = mysql_fetch_assoc($res))
           return $row['d'];
       return "";
   }
   function write($sessID,$sessData) {

       $newExp = time() + $this->lifeTime;

       $res = mysql_query("SELECT * FROM sessions
                           WHERE session_id = '$sessID'",$this->dbHandle);

       if($res) {

           mysql_query("UPDATE sessions SET session_expires = '{$newExp}',session_data = '{$sessData}' WHERE session_id = '{$sessID}'",$this->dbHandle);

           if(mysql_affected_rows($this->dbHandle))
               return true;
       }

       else {

           mysql_query("INSERT INTO sessions (
                         session_id,
                         session_expires,
                         session_data)
                         VALUES(
                         '{$sessID}',
						 '{$newExp}',
						 '{$sessData}')",$this->dbHandle);

           if(mysql_affected_rows($this->dbHandle))
               return true;
       }

       return false;
   }
   function destroy($sessID) {

       mysql_query("DELETE FROM sessions WHERE session_id = '$sessID'",$this->dbHandle);

       if(mysql_affected_rows($this->dbHandle))
           return true;

       return false;
   }
   function gc($sessMaxLifeTime) {

       mysql_query("DELETE FROM sessions WHERE session_expires < ".time(),$this->dbHandle);

       return mysql_affected_rows($this->dbHandle);
   }
}
#对session进行测试,发现数据库中并没有存入数据只有session_id,和session_expires的数值,其实session_data是存在的只是我们看不到
 $session = new session();
	session_set_save_handler(array(&$session,"open"),
							 array(&$session,"close"),
							 array(&$session,"read"),
							 array(&$session,"write"),
							 array(&$session,"destroy"),
							 array(&$session,"gc"));
			session_start();
			$session->write(session_id(),json_encode(array("name"=>"gxx","pass"=>"123")));
			echo $session->read(session_id());
?>
这里居然不支持插图。。

数据库数据:

s430j9t480ocbovq6a7a0rlk22    1435054078

session查询数据:

JSON

  • name"gxx"
  • pass"123"

不要被事物蒙蔽了眼睛。。。。

时间: 2024-10-11 18:25:59

php session存数据库的相关文章

springmvc和servlet下的文件上传和下载(存文件目录和存数据库Blob两种方式)

项目中涉及了文件的上传和下载,以前在struts2下做过,今天又用springmvc做了一遍,发现springmvc封装的特别好,基本不用几行代码就完成了,下面把代码贴出来: FileUpAndDown.jsp <%@ page language="java" contentType="text/html; charset=UTF-8"%> <html> <head> <title>using commons Uplo

PHP操纵session存入数据库

1 为什么需要session入库 当session中数据很多时,或者web服务器集群共享session时,就需要将session存入数据库 session存入数据库一般是要重写session存储机制,具体实现主要通过: a  自定义相关session函数 b  创建session表 c  重写session函数 数据表如下: 在session.php中重写存储机制 在其他php文件中引入session.php,就可以操作session存入数据库了 查询操作如下:

将Session写入数据库

使用session_set_save_handler()函数,将Session的内容写入数据库 1 <?php 2 /* 3 *@author Fahy 4 *@link http://home.cnblogs.com/u/HuangWj 5 *数据库为mysql, 6 *数据库名为session,表名为session, 7 *表中字段包括PHPSESSID,update_time,client_ip,data 8 */ 9 class Session{ 10 private static $h

session放数据库里解决丢失的问题

在编程里是会话的意思Session 对象存储特定用户会话所需的信息.这样,当用户在应用程序的 Web 页之间跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去. 当用户请求来自应用程序的 Web 页时,如果该用户还没有会话,则 Web 服务器将自动创建一个 Session 对象.当会话过期或被放弃后,服务器将终止该会话. Session 对象最常见的一个用法就是存储用户的首选项.例如,如果用户指明不喜欢查看图形,就可以将该信息存储在 Session 对象中.

将session存入数据库,memcache的方法

//存入数据库 <?phpif(!$con = mysql_connect('localhost','root','123456')){    die('连接数据库失败');}$link = mysql_select_db('session');//session入库function open($save_path,$session_name){    return true;}function close(){    }function read($id){    //查询的sql语句    

CI框架3.0关于session的设置改动及存数据库的使用方法

Session的设置跟之前有点不一样 我们来看看2.0版本中的设置是什么样子的: $config['sess_cookie_name']= 'test_session'; $config['sess_expiration']= 7200; $config['sess_expire_on_close']= FALSE; $config['sess_encrypt_cookie']= FALSE; $config['sess_use_database']= TRUE; $config['sess_t

redis作为cache和session的数据库的使用

package main import ( _ "./routers" "fmt" "github.com/astaxie/beego" _ "github.com/astaxie/beego/cache/redis" "github.com/astaxie/beego/cache" "log" "time" ) type hashes struct { name s

php改写session到数据库

session改写mysql 在调用 session_start();的地方改用实例化本类即可new SessionDB(); session_set_save_handler( array($this, 'userSessionBegin'), array($this, 'userSessionEnd'), array($this, 'userSessionRead'), array($this, 'userSessionWrite'), array($this, 'userSessionDe

将php的session存放到redis里面

通常我们将session存储到memcached,但是有时候老大让你将session存储到Redis怎么办,因此有必要了解下如何将session存到redis. step1.服务器上需要安装redis扩展(以php7为例) # 以安装php7为例,简单起见直接安装了全部的包 yum install php70w.x86_64 php70w-cli.x86_64 php70w-common.x86_64 php70w-gd.x86_64 php70w-ldap.x86_64 php70w-mbst