PHP writes user information to the database_PHP tutorial

WBOY
Release: 2016-07-13 10:02:00
Original
1473 people have browsed it

PHP writes user information to the database

Session advanced application writes user information into the database

First create a database table

Create a session table in the experimental database sqldb to store data

Create the files you need to use in the root directory (the focus is on the session, class.php class file, including some methods)

The main method used in session.class.php is session_set_save_handler(), which uses PDO to perform data operations and writes classes into database tables.

Some static methods are defined in the class, and their attributes must also be static, so that the session data is written directly into the database instead of being saved in the local folder

First create a Session class. First define some private static attributes in the class, including IP, survival time and time

<!--?php
	//定义session类
    class Session{
    	private static $handler=null;
    	private static $ip=null;
    	private static $lifetime=null;
    	private static $time=null;
</pre-->

Copy after login
private static function init($handler){ self::$handler=$handler; //代表PDO的链接 //ip先判断不为空 self::$ip=!empty($_SERVER["REMOTE_ADDR"])? $_SERVER["REMOTE_ADDR"] : &#39;unkown&#39;; //从配置文件取出生存时间 self::$lifetime=ini_get(&#39;session.gc_maxlifetime&#39;); self::$time=time(); }
Copy after login

The next step is to define the method to open the session.

//定义开启session的方法
static function start(PDO $pdo){
    	self::init($pdo);  //初始化私有方法
    	session_set_save_handler(
    		array(__CLASS__,"open"),
    		array(__CLASS__,"close"),
    		array(__CLASS__,"read"),
    		array(__CLASS__,"write"),
    		array(__CLASS__,"destroy"),
    		array(__CLASS__,"gc")
    		);
    	session_start();
}
Copy after login

There are open, close, read, write, destroy, and gc methods in opening a session. These methods are mainly defined below.

open() and close() methods

public static function open($path, $name){
    return true;
}
public static function close(){
    return true;
}
Copy after login

When defining these methods, the most important ones are the write() and read() methods, because this is to read or write directly from the database, using PDO database preprocessing method

read(): First perform PDO preprocessing, and then in the obtained record, determine whether the IP is the IP in the database and whether the retrieved data has expired. If not, it will be read successfully

    public static function read($PHPSESSID){
    	$sql="select PHPSESSID,update_time,client_ip,data from session where PHPSESSID= ?"; //用?参数
    	//PDO预处理
    	$stmt=self::$handler->prepare($sql);
    	$stmt->execute(array($PHPSESSID));
    	//获取一条记录
    	if(!$result=$stmt->fetch(PDO::FETCH_ASSOC)){
    		return &#39;&#39;;
    	}
    	//判断当前访问ip是否为数据库存在的ip
    	if(self::$ip != $result["client_ip"]){
    		self::destroy($PHPSESSID);  //销毁用户
    		return &#39;&#39;;
    	}
    	//判断是不是过期的
    	if(($result["update_time"] + self::$lifetime) < self::$time){
    		self::destroy($PHPSESSID);
    		return &#39;&#39;;
    	}
    	return $result[&#39;data&#39;];  //成功读出
    }
Copy after login


write(): The writing method is also important. It needs to be judged whether the incoming data is empty. If it is empty, it will not be inserted.

    public static function write($PHPSESSID, $data){
    	$sql="select PHPSESSID,update_time,client_ip,data from session where PHPSESSID= ?";
    	$stmt=self::$handler->prepare($sql);
    	$stmt->execute(array($PHPSESSID));

    	if($result=$stmt->fetch(PDO::FETCH_ASSOC)){
    		//延迟30更新
    		if($result[&#39;data&#39;] != $data || self::$time > ($result[&#39;update_time&#39;]+30)){
    			//更新数据语句
    			$sql="uptate session set update_time=?, data=? where PHPSESSID=?";
    			$stm=self::$handler->prepare($sql);
    			$stm->execute(array(self::$time, $data, $PHPSESSID));
    		}
    	}else{
    		//判断传进来的数据是否为空,空时不插入
    		if(!empty($data)){
    			$sql="insert into session(PHPSESSID,update_time,client_ip,data) values(?,?,?,?)";  //插入值用?参数
    			$sth=self::$handler->prepare($sql);
    			$sth->execute(array($PHPSESSID,self::$time,self::$ip,$data)); //必须用数组
    		}
    	}
    	return true;
    }
Copy after login

The next step is to destroy the data

Same as destroy() and gc()

destroy(): Data deletion

gc(): Garbage collection

    public static function destroy($PHPSESSID){
    	$sql="delete from session where PHPSESSID=?";

    	$stmt=self::$handler->prepare($sql);
    	$stmt->execute(array($PHPSESSID));
    	return true;
    }
    private static function gc($lifetime){
    	$sql="delete from session where update_time < ?";
    	$stmt=self::$handler->prepare($sql);
    	$stmt->execute(array(self::$time-$lifetime));
    	return true;
    }

    }
Copy after login

Finally, an exception is thrown and the session class is called.

    try{
    	$pdo=new PDO("mysql:host=localhost;dbname=sqldb","root","heyifeng19930924");
    }catch(PDOException $e){
    	echo $e->getMessage();
    }

    //调用session类
    Session::start($pdo);
Copy after login


In the test file, the writing method is the same as the advanced usage of session (i.e. the test file of the previous blog)

Just include this class file in the include file

That is: include "session.class.php";

Test results, if the data is inserted successfully, query the table information and display it in the database:

That is, pass the value of column PHPSESSID

After deletion and revocation, the query form displays

The value of PHPSESSID is revoked

www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/971082.htmlTechArticlephp writes user information to the database session advanced application writes user information to the database First create a database table Create a session table in the experimental database sqldb to store data...
Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template