设为首页 收藏本站
查看: 853|回复: 0

[经验分享] php开发之session的高级应用

[复制链接]

尚未签到

发表于 2015-11-17 11:55:51 | 显示全部楼层 |阅读模式
  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();
?>
  运行结果如下:

DSC0000.jpg
  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);

DSC0001.jpg

下面分别将这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);
}
  具体的代码运行就不做了,等到学完面向对象的编程的时候给大家演示下哦。

版权声明:本文为博主原创文章,未经博主允许不得转载。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-140289-1-1.html 上篇帖子: php5对象复制、clone、浅复制与深复制的区别与介绍 下篇帖子: php5+Apache2+mysql+Eclipse debug完全配置(略有补充)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表