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 相关文章推荐
解析php中两种缩放图片的函数,为图片添加水印
Jun 14 PHP
PHP对象相互引用的内存溢出实例分析
Aug 28 PHP
php实现获取及设置用户访问页面语言类
Sep 24 PHP
PHP使用header()输出图片缓存实例
Dec 09 PHP
php使用pdo连接报错Connection failed SQLSTATE的解决方法
Dec 15 PHP
php使用Cookie实现和用户会话的方法
Jan 21 PHP
jQuery向下滚动即时加载内容实现的瀑布流效果
Jan 07 PHP
php 修改上传文件大小限制实例详解
Oct 23 PHP
php实现36进制与10进制转换功能示例
Jan 10 PHP
关于Laravel Route重定向的一个注意点
Jan 16 PHP
PHP实现微信退款的方法示例
Mar 26 PHP
利用PHP计算有多少小于当前数字的数字方法示例
Aug 26 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
wamp下修改mysql访问密码的解决方法
2013/05/07 PHP
Yii入门教程之目录结构、入口文件及路由设置
2014/11/25 PHP
php动态变量定义及使用
2015/06/10 PHP
javaScript 数值型和字符串型之间的转换
2009/07/25 Javascript
jQuery 数据缓存data(name, value)详解及实现
2010/01/04 Javascript
常见JS效果之图片减速度滚动实现代码
2011/12/08 Javascript
如何将JS的变量值传递给ASP变量
2012/12/10 Javascript
网页中可关闭的漂浮窗口实现可自行调节
2013/08/20 Javascript
jQuery 借助插件Lavalamp实现导航条动态美化效果
2013/09/27 Javascript
浅谈jQuery 选择器和dom操作
2016/06/07 Javascript
教你JS中的运算符乘方、开方及变量格式转换
2016/08/09 Javascript
Vue实现virtual-dom的原理简析
2017/07/10 Javascript
详解使用jQuery.i18n.properties实现js国际化
2018/05/04 jQuery
js利用递归与promise 按顺序请求数据的方法
2019/08/30 Javascript
原生JavaScript实现滑动拖动验证的示例代码
2019/12/06 Javascript
js动态添加带圆圈序号列表的实例代码
2021/02/18 Javascript
在Python中使用AOP实现Redis缓存示例
2017/07/11 Python
python对于requests的封装方法详解
2019/01/03 Python
Python字典对象实现原理详解
2019/07/01 Python
python里运用私有属性和方法总结
2019/07/08 Python
Python csv模块使用方法代码实例
2019/08/29 Python
next在python中返回迭代器的实例方法
2020/12/15 Python
CSS3制作彩色进度条样式的代码示例分享
2016/06/23 HTML / CSS
美国畅销的跑步机品牌:ProForm
2017/02/06 全球购物
艺术用品:Arteza
2018/11/25 全球购物
心理学专业毕业生推荐信范文
2013/11/21 职场文书
幼儿园教师培训制度
2014/01/16 职场文书
校园之声广播稿
2014/01/31 职场文书
求职者怎样写自荐信
2014/04/13 职场文书
大学生村官演讲稿
2014/04/25 职场文书
遵纪守法演讲稿
2014/05/23 职场文书
红色经典电影观后感
2015/06/18 职场文书
如何用RabbitMQ和Swoole实现一个异步任务系统
2021/05/29 PHP
Elasticsearch 索引操作和增删改查
2022/04/19 Python
Redis官方可视化工具RedisInsight安装使用教程
2022/04/19 Redis
netty 实现tomcat的示例代码
2022/06/05 Servers