电脑安全

您当前的位置:主页 > 电脑安全 >

php中把session保存到MySQL数据库中示例-网络编程

来源:[db:来源]标题:   文件    编辑:电脑技术全能网 时间:2019-09-18 16:51

原标题:php中把session保存到MySQL数据库中示例-网络编程
   上面这个例子是应用了php中的session_set_save_handler函数保留到数据库中,这个有点像小编写的购物车道理了,上面来看看这个例子,盼望对列位有关心。 PHP保留session默许的是采纳的文件的方法来保留的,这仅仅在文件的空间开支很小的windows上是能够采纳的,然而假如咱们采纳uinx或许是liux上的文件体系的时间,如许的文件体系的文件空间开支是很大的,但是session是要不时刻刻的应用的,大批的用户就要创立许多的session文件,如许对全部的效劳器带来机能成绩。另一方面,假如效劳器起采纳聚集的方法的话就不能坚持session的分歧性,以是咱们停当要采纳数据库的方法来保留session,如许,不论有几台效劳器同时应用,只有把他们的session保留在一台数据库效劳器上便可以保障session的完全了,详细怎样来完成请持续看上来。PHP保留session默许的情形下是采纳的文件方法来保留的,咱们在PHP的配制文件PHP.ini中能够看到如许的一行:session.save_handler="files"如许的意义就是采纳文件来保留session 的,要采纳数据库来保留的话,咱们须要修正成用户形式,改成session.save_handler="use"便可以了,然而,这仅仅是阐明我门没有采纳文件的方法存储session,咱们还要抉择数据库和树立数据库的表。树立数据库和数据库的表构造,咱们能够采纳PHP能够应用的任何的数据库,由于PHP和mysql的联合最好,我就应用mysql来做示例,固然依据你的须要能够改称其余数据库。创立数据库create database 'session';创立表构造create table 'session'( id char(32) not null , 'user 'char(30), data char(3000) ,primary key ('id') );PHP保留session编写PHP文件 代码以下复制代码 <?php$con = mysql_connect("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;}}function gc($maxlifetime) {return true;}session_set_save_handler("open", "close", "read", "write", "destroy", "gc");session_start();// proceed to use sessions normally 保留成为session_user_start.php。当初咱们的PHP保留session的任务就曾经实现了,只有你在须要在应用session的时间,把session_user_start.php包括出去.留神,这个文件必定要在文件的第一行包括,而后就像应用文件的session一样的方式应用便可以了。以上仅仅是个简略教程,在现实的利用中,能够对它封装得更业余些,参考代码以下:SessionMysql.class.php 代码以下复制代码 <?php/*** SessionMysql 数据库存储类*/defined('IN_QIAN') or exit('Access Denied');class SessionMysql {public $lifetime = 1800; // 无效期,单元:秒(s),默许30分钟public $db;public $table;/** * 结构函数 */public function __construct() {$this->db = Base::loadModel('SessionModel');$this->lifetime = Base::loadConfig('system', 'session_lifetime');session_set_save_handler(array(&$this, 'open'),// 在运转session_start()时履行array(&$this, 'close'),// 在剧本履行实现 或 挪用session_write_close() 或 session_destroy()时被履行,即在全部session操纵完后被履行array(&$this, 'read'),// 在运转session_start()时履行,由于在session_start时,会去read以后session数据array(&$this, 'write'),// 此方式在剧本停止和应用session_write_close()强迫提交SESSION数据时履行array(&$this, 'destroy'),// 在运转session_destroy()时履行array(&$this, 'gc')// 履行几率由session.gc_probability 和 session.gc_divisor的值决议,机会是在open,read以后,session_start会接踵履行open,read和gc);session_start(); // 这也是必需的,翻开session,必需在session_set_save_handler前面履行}/** * session_set_save_handler open方式 * * @param $savePath * @param $sessionName * @return true */public function open($savePath, $sessionName) {return true;}/** * session_set_save_handler close方式 * * @return bool */public function close() {return $this->gc($this->lifetime);}/** * 读取session_id * * session_set_save_handler read方式 * @return string 读取session_id */public function read($sessionId) {$condition = array('where' => array('session_id' => $sessionId),'fields' => 'data');$row = $this->db->fetchFirst($condition);return $row ? $row['data'] : '';}/** * 写入session_id 的值 * * @param $sessionId 会话ID * @param $data 值 * @return mixed query 履行成果 */public function write($sessionId, $data) {$userId = isset($_SESSION['userId']) ? $_SESSION['userId'] : 0;$roleId = isset($_SESSION['roleId']) ? $_SESSION['roleId'] : 0;$grouId = isset($_SESSION['grouId']) ? $_SESSION['grouId'] : 0;$m = defined('ROUTE_M') ? ROUTE_M : '';$c = defined('ROUTE_C') ? ROUTE_C : '';$a = defined('ROUTE_A') ? ROUTE_A : '';if (strlen($data) > 255) {$data = '';}$ip = get_ip();$sessionData = array('session_id'=> $sessionId,'user_id'=> $userId,'ip'=> $ip,'last_visit'=> SYS_TIME,'role_id'=> $roleId,'group_id'=> $grouId,'m'=> $m,'c'=> $c,'a'=> $a,'data'=> $data,);return $this->db->insert($sessionData, 1, 1);}/** * 删除指定的session_id * * @param string $sessionId 会话ID * @return bool */public function destroy($sessionId) {return $this->db->delete(array('session_id' => $sessionId));}/** * 删除过时的 session * * @param $lifetime session无效期(单元:秒) * @return bool*/public function gc($lifetime) {$expireTime = SYS_TIME - $lifetime;return $this->db->delete("`last_visit`<$expireTime");}} 在体系文件的某个处所,实例化这个类便可!new SessionMysql();

上一篇:PHP中错误处理的一些方法-网络编程

下一篇:没有了