[转]PHP用mysql数据库存储session
From : http://www.php100.com/html/webkaifa/PHP/PHPyingyong/2010/0226/4002.html
大部分使用php的人一旦应用到session都会使用cookie。
cookie虽好可是它也会给我们带来一些隐患的。
隐患一:如果客户端机器的cookie一旦因病毒而失效了,那么session也就相当于没有了。
隐患二:session在php中默认的是以文件的形式保存在一个临时文件夹里面的,对于一个小型系统来说,这样做完全可以,
可是对于一个大型而又被经常访问的系统来说,就不是很好的办法了。假设这个网站一天有1000个人访问。一个月以后session的临时文件夹就会有30000个临时文件。想象一下计算机要从30000里面找一条session_sid是一个多么漫长的事情呀!
因此为了提高效率。
交易使用用数据库保存session。具体方法如下:
1.更改php.ini文件。
由于php默认保存session的方式是files所以我们要改变它。即:找到“session.save_handler = files”将“files”改为“User”。
把session的模式改成用户自定义的。
2.建立数据库:
CREATE TABLE `db_session` (`sesskey` char(32) NOT NULL,`expiry` int(11) unsigned NOT NULL,`value` text NOT NULL,PRIMARY KEY (`sesskey`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
数据库表明:db_session
列名:sesskey,expiry,value 其中:sesskey为主键。
Value里面存放着session里面的值。
3.建立session_mysql.php文件。这个文件是用来构造保存session的方法的。修改一下参数直接使用就可以了。
session_mysql.php
复制PHP内容到剪贴板
PHP代码:
<?php$gb_DBname="db_myBBS";//数据库名称$gb_DBuser="root";//数据库用户名称$gb_DBpass="23928484";//数据库密码$gb_DBHOSTname="localhost";//主机的名称或是IP地址$SESS_DBH="";$SESS_LIFE=get_cfg_var("session.gc_maxlifetime");//得到session的最大有效期。function sess_open($save_path,$session_name){global $gb_DBHOSTname,$gb_DBname,$gb_DBuser,$gb_DBpass,$SESS_DBH;if(!$SESS_DBH=mysql_pconnect($gb_DBHOSTname,$gb_DBuser,$gb_DBpass)){echo "<li>MySql Error:".mysql_error()."<li>";die();}if(!mysql_select_db($gb_DBname,$SESS_DBH)){echo "<li>MySql Error:".mysql_error()."<li>";die();}return true;}function sess_close(){return true;}function sess_read($key){global $SESS_DBH,$SESS_LIFE;$qry="select value from db_session where sesskey = '$key' and expiry > ".time();$qid=mysql_query($qry,$SESS_DBH);if(list($value)=mysql_fetch_row($qid)){return $value;}return false;}function sess_write($key,$val){global $SESS_DBH,$SESS_LIFE;$expiry=time()+$SESS_LIFE;$value=$val;$qry="insert into db_session values('$key',$expiry,'$value')";$qid=mysql_query($qry,$SESS_DBH);if(!$qid){$qry="update db_session set expiry=$expiry, value='$value' where sesskey='$key' and expiry >".time();$qid=mysql_query($qry,$SESS_DBH);}return $qid;}function sess_destroy($key){global $SESS_DBH;$qry="delete from db_session where sesskey = '$key'";$qid=mysql_query($qry,$SESS_DBH);return $qid;}function sess_gc($maxlifetime){global $SESS_DBH;$qry="delete from db_session where expiry < ".time();$qid=mysql_query($qry,$SESS_DBH);return mysql_affected_rows($SESS_DBH);}session_module_name();session_set_save_handler("sess_open","sess_close","sess_read","sess_write","sess_destroy","sess_gc"); ?>
4.建立测试文件。
在使用之前必须引用刚刚建立的session_mysql.php文件。
session_test.php
复制PHP内容到剪贴板
PHP代码:
<?php include ("session_mysql.php"); session_start(); $_SESSION['abc']= "A: I will be back!"; $_SESSION['meto']= "B: Me too "; $_SESSION['name']= "louis "; echo "<a href=\"get_session_test.php\">click me</a>"; ?>get_session_test.php <?php include ("session_mysql.php"); session_start(); echo $_SESSION['abc']; echo "<br>"; echo $_SESSION['meto']; echo "<br>"; echo $_SESSION['name']; $_SESSION['wq']="12e"; echo "<br><a href=\"get_session_test2.php\">click again</a>"; ?>get_session_test2.php <?php include ("session_mysql.php"); session_start(); echo $_SESSION['abc']; echo "<br>"; echo $_SESSION['meto']; echo "<br>"; echo $_SESSION['name']; echo "<br>"; echo $_SESSION['wq']; //session_destroy();//用来销毁所有session的函数。 ?>
其它参考资料:
http://www.cnblogs.com/youxin/p/3529853.html
http://www.oschina.net/search?scope=project&q=php+session
[转]PHP用mysql数据库存储session相关推荐
- 对 PHP SESSION 的深刻认识(三)---- 数据库存储session
前言: 本篇博客是继承自我的前面的两篇博客 <对 PHP SESSION 的深刻认识(一)>.<对 PHP SESSION 的深刻认识(二)> 而来的,主要是解决前面的问题. ...
- MySQL—05—MySQL如何处理SQL语句;MySQL数据库存储引擎介绍;
一. MySQL 中的执行计划 1 MySQL 执行计划 在 MySQL 中可以通过 explain 关键字模拟优化器,执行 SQL 语句,从而知道 MySQL 是 如何处理 SQL 语句的. 2 M ...
- 以下用于数据存储领域的python第三方库是-Python3爬虫学习之MySQL数据库存储爬取的信息详解...
本文实例讲述了Python3爬虫学习之MySQL数据库存储爬取的信息.分享给大家供大家参考,具体如下: 数据库存储爬取的信息(MySQL) 爬取到的数据为了更好地进行分析利用,而之前将爬取得数据存放在 ...
- ubuntu mysql数据储存在哪里_如何更改在Ubuntu下的MySQL数据库存储位置?
在默认的数据库存储位置下就会有个文件夹mysqldb.要操作数据库首先得停止数据库进程: $sudo /etc/init.d/mysql stop 本文以转移到/home/mysql这个位置为例,下面 ...
- 【笔记11】uniapp点击复制;mysql数据库存储emoji表情;Java 二维码生成;uniapp引入自定义图标
目录 前言 一.uniapp 实现点击复制某段文本 二.MySQL 数据库存储 emoji 表情 三.Layui 的富文本编辑器 四.谷歌 Java 二维码生成 (1) 引入 MAVEN 依赖 五.微 ...
- Mysql数据库存储的原理
Mysql数据库存储的原理 Mysql储存过程简介 Mysql数据库存储的优点 1.存储过程能实现较快的执行速度. 2.存储过程允许标准组件是编程. 3.存储过程可以用流控制语句编写,有很强的灵活性, ...
- mysql 设置数据库路径_MySQL数据库之更改Mysql数据库存储位置的具体步骤
本文主要向大家介绍了MySQL数据库之更改Mysql数据库存储位置的具体步骤 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. 一.首先把mysql的服务先停掉. 二.更改MySQ ...
- Mysql数据库存储引擎--转
原文地址:http://pangge.blog.51cto.com/6013757/1303893 简单介绍 存储引擎就是指表的类型.数据库的存储引擎决定了表在计算机中的存储方式.存储引擎的概念是My ...
- redis/分布式文件存储系统/数据库 存储session,解决负载均衡集群中session不一致问题...
先来说下session和cookie的异同 session和cookie不仅仅是一个存放在服务器端,一个存放在客户端那么笼统 session虽然存放在服务器端,但是也需要和客户端相互匹配,试想一个浏览 ...
最新文章
- mysql的安装和启动_mysql安装和启动
- python天天学怎么样-每天一遍,好好学习,天天向上(Python)
- 岗位推荐 | 腾讯招聘自然语言处理方向实习生
- 想学习UI设计,培训的话需要多少钱?
- python web开发框架 支持windows_基于Python的Web开发框架研究_曾浩
- winscp自动执行脚本
- algorithm头文件中的函数:remove()与remove_if() 函数,……
- 万稞pw80线切割编程软件_线切割的老司机们,你们知道绘图编程软件AUTOP是怎么来的吗?...
- 面试宝典-Java反射机制
- 二阶有源带通滤波器滤波原理
- 易基因 - 外泌体let-7d-3p和miR-30d-5p作为宫颈癌及其癌前病变无创筛查的诊断标志物|早期筛查
- NetLimiter Pro
- 【财富空间】像先知一样思考,如拳手般战斗
- 视频音频提取器推荐:快速提取视频中的音频!
- 软件授权码方案(附Python示例代码)
- 详解量子计算:相位反冲与相位反转
- Micropython——关于Pico中I2C和SPI的实际应用示例(OLED屏幕显示)
- Symmetric Difference
- linux下ffmpeg库 ARM交叉编译
- 写代码到底应该买什么键盘?