php session的应用详细介绍


Posted in PHP onMarch 22, 2017

php session高级应用

session在web技术中非常重要,由于网页是一种无状态的连接程序,因此无法得知用户的浏览状态。通过session则可以记录用户的有关信息,以供用户再次以此身份对web服务器提交要求时确认。

例如:用户在浏览电子商务网站的时候,如果没有session,那么用户每次浏览就需要输入账户密码。

1,Session 临时文件

在服务器中,如果将用户所有的Session都保存到临时目录中,会降低服务器的安全性和效率。打开服务器存储的站点会非常的慢。

使用PHP函数session_save_path()函数存储Session临时文件,可以缓解因临时文件的存储导致的服务器效率降低和站点打开缓慢的问题。

示例代码如下:

<?php
$path ="./tmp/";    //设置session存储的路径
session_save_path($path);
session_start();
$_SESSION['userName']=true;
?>

注意

session_save_path() 必须在session_start() 之前执行。

2,Session 缓存

Session 缓存是将网页中的内容临时存储到IE客户端的Temporary INternet Files文件夹,并且可以设置缓存的时间。

Session的缓存使用的是 session_cache_limiter()函数,其语法如下:

string session_cache_limiter([string cache_limiter]);

其中参数cache_limiter 为public 或private 。同事session不是在服务器端,而是在客户端。在服务器中没有显示。

缓存时间的设置,使用的是函数 session_cache_expire()语法如下:

int session_cache_expire([int new_cahche_expire]);

参数new_cahche_expire 是session缓存的时间数字,单位分钟。

注意:

这两个session函数必须在session_start()函数之前执行

session 缓存页面的示例代码如下:

<?php

session_cache_limiter("private");
$cache_limit =session_cache_limiter();   //开启客户端缓存
echo "缓存限制为:".$cache_limit."\n";
session_cache_expire(30);
$cache_expire = session_cache_expire();  //设定客户端缓存时间
echo "客户端缓存时间为:".$cache_expire."分钟\n";
session_start();

?>

运行结果如下:

php session的应用详细介绍

3,Session数据库存储

在php中Session 的数据库存储主要是通过 session_set_save_handler()函数来实现的。 具体语法如下:
bool session_set_save_handler(string open,string close,string read,string write,string destroy,string gc);

php session的应用详细介绍

下面分别将这6个参数(函数)分装起来,在学习完面向对象编程后,大家会有一个更加清晰的认识。

(1) 封装session_open()函数,代码如下:

function _session_open($save_path,$session_name){
global $handle;
$handle =mysql_connect('localhost','root','root')or die('数据库连接失败!');
mysql_select_db('db_database11',$handle)or die('数据库不存在');
return(true);
}

(2)封装session_close()函数,代码如下:

function _session_close(){
global $handle;
mysql_close($handle);
return(true);
}

(3) 封装 session_read()函数,在函数中设定当前时间的UNIX时间戳,根据$key查找Session名片及内容。代码如下:

function _session_read($key){
golbal $handle;     //全局变量$handle 连接数据库
$time =time();     //设定当前时间
$sql ="select session_data from tb_session where session_key = '$key' and session_time>'$time'";
$result =mysql_query($ssql,$handle);
$row =mysql_fetch_array($result);
if($row){
return($row['session_data']);
}else{
return(false);
}
}

(4) 封装session_write()函数,函数设定Session的失效时间,查找到Session的名称及内容,如果查询结果为空。则将页面中Session根据session_id,session_name,失效时间,插入数据库中。如果查询结果不为空,则根据 $key修改数据库中Session存储信息。代码如下:

function _session_write($key,$data){
global $handle;
$time = 60*60;
$lapse_time =time()+$time;   //得到UNIX时间戳
$sql = "select session_data from tb_session where session_key ='$key' and session_time>$lapse_time";
$result =mysql_query($sql,$handle);
if(mysql_num_rows($result)==0){  //没有结果
$sql ="insert into tb_session values('$key','$data',$lapse_time)";
$result =mysql_query($sql,$handle);
}else{
$sql ="update tb_session set session_key='$key',session_data ='$data',session_time =$lapse_time where session_key ='$key'";
$result =mysql_query($sql,$handle);
}
return($result);
}

(5) 封装session_destroy(),根据$key删除数据库中的Sessin.代码如下:

function _session_destroy(){
global $handle;
$sql ="delete from tb_session where session_key ='$key'";
$result =mysql_query($sql,$handle);
}

(6)封装session_gc(),根据Session的失效时间删除过期的Session,示例代码如下:

functin _session_gc($expiry_time){
global $handle;
$sql ="delete from tb_session where session_expiry_time<$expiry_time";
$result =mysql_query($sql,$handle);
return($result);
}

具体的代码运行就不做了,等到学完面向对象的编程的时候给大家演示下哦。

PHP 相关文章推荐
不用GD库生成当前时间的PNG格式图象的程序
Oct 09 PHP
php download.php实现代码 跳转到下载文件(response.redirect)
Aug 26 PHP
谷歌音乐搜索栏的提示功能php修正代码
May 09 PHP
解析thinkphp基本配置 convention.php
Jun 18 PHP
解析CI的AJAX分页 另类实现方法
Jun 27 PHP
修改apache配置文件去除thinkphp url中的index.php
Jan 17 PHP
php+mysqli实现将数据库中一张表信息打印到表格里的方法
Jan 28 PHP
Symfony实现行为和模板中取得request参数的方法
Mar 17 PHP
php类自动装载、链式操作、魔术方法实现代码
Jul 23 PHP
PHP实现数组转JSon和JSon转数组的方法示例
Jun 14 PHP
Laravel6.18.19如何优雅的切换发件账户
Jun 14 PHP
PHP编程一定要改掉的5个不良习惯
Sep 18 PHP
php 开发中加密的几种方法总结
Mar 22 #PHP
详解Yii2高级版引入bootstrap.js的一个办法
Mar 21 #PHP
详解Yii2.0 rules验证规则集合
Mar 21 #PHP
php连接mysql数据库
Mar 21 #PHP
Thinkphp实现站点静态化的方法详解
Mar 21 #PHP
php登录超时检测功能实例详解
Mar 21 #PHP
php base64 编码与解码实例代码
Mar 21 #PHP
You might like
php实现的Curl封装类Curl.class.php用法实例分析
2015/09/25 PHP
PHP中的session安全吗?
2016/01/22 PHP
php实现的双色球算法示例
2017/06/20 PHP
php5.3/5.4/5.5/5.6/7常见新增特性汇总整理
2020/02/27 PHP
js获取TreeView控件选中节点的Text和Value值的方法
2012/11/24 Javascript
用jquery仿做发微博功能示例
2014/04/18 Javascript
jQuery使用CSS()方法给指定元素同时设置多个样式
2015/03/26 Javascript
用svg制作富有动态的tooltip
2015/07/17 Javascript
JS简单模拟触发按钮点击功能的方法
2015/11/30 Javascript
使用jQuery监听DOM元素大小变化
2016/02/24 Javascript
JQuery解析XML的方法小结
2016/04/02 Javascript
AngularJS上拉加载问题解决方法
2016/05/23 Javascript
jQuery实现图片轮播效果代码(基于jquery.pack.js插件)
2016/06/02 Javascript
AngularJS  $modal弹出框实例代码
2016/08/24 Javascript
如何利用模板将HTML从JavaScript中抽离
2016/10/08 Javascript
Vue异步组件使用详解
2017/04/08 Javascript
解决vue项目中type=”file“ change事件只执行一次的问题
2018/05/16 Javascript
使用elementUI实现将图片上传到本地的示例
2018/09/04 Javascript
vue+echarts实现动态绘制图表及异步加载数据的方法
2018/10/17 Javascript
[08:53]DOTA2每周TOP10 精彩击杀集锦vol.9
2014/06/26 DOTA
python 类详解及简单实例
2017/03/24 Python
Python语言检测模块langid和langdetect的使用实例
2019/02/19 Python
Python any()函数的使用方法
2019/10/28 Python
python 实现Harris角点检测算法
2020/12/11 Python
python Matplotlib基础--如何添加文本和标注
2021/01/26 Python
python自动化办公操作PPT的实现
2021/02/05 Python
css3 旋转按钮 使用CSS3创建一个旋转可变色按钮
2012/12/31 HTML / CSS
HTML5+CSS3应用详解
2014/02/24 HTML / CSS
财务人员求职自荐书范文
2014/02/10 职场文书
教师通用专业自荐书范文
2014/02/11 职场文书
超市优秀员工事迹材料
2014/05/01 职场文书
离婚协议书怎么写(范本参考)
2014/09/30 职场文书
财政局党的群众路线教育实践活动剖析材料
2014/10/13 职场文书
2015-2016年小学教导工作总结
2015/07/21 职场文书
2016廉洁教育心得体会
2016/01/20 职场文书
MongoDB误操作后使用oplog恢复数据
2022/04/11 MongoDB