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 相关文章推荐
轻松修复Discuz!数据库
May 03 PHP
PHP类的使用 实例代码讲解
Dec 28 PHP
一步一步学习PHP(3) php 函数
Feb 15 PHP
php笔记之常用文件操作
Oct 12 PHP
wordpress自定义url参数实现路由功能的代码示例
Nov 28 PHP
php中函数前加&amp;符号的作用分解
Jul 08 PHP
phalcon框架使用指南
Feb 23 PHP
php中json_encode不兼容JSON_UNESCAPED_UNICODE的解决方案
May 31 PHP
PHPCMS手机站伪静态设置详细教程
Feb 06 PHP
完美解决thinkphp唯一索引重复时出错的问题
Mar 31 PHP
Yii2数据库操作常用方法小结
May 04 PHP
LaravelS通过Swoole加速Laravel/Lumen详解
Mar 02 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 时间计算问题小结
2009/01/04 PHP
php_screw安装使用教程(另一个PHP代码加密实现)
2014/05/29 PHP
PHP获取一个字符串中间一部分字符的方法
2014/08/19 PHP
深入浅析PHP7.0新特征(五大新特征)
2015/10/29 PHP
在thinkphp5.0路径中实现去除index.php的方式
2019/10/16 PHP
如何在Laravel5.8中正确地应用Repository设计模式
2019/11/26 PHP
用js+xml自动生成表格的东西
2006/12/21 Javascript
JavaScript中的Screen屏幕对象
2008/01/16 Javascript
让alert不出现弹窗的两种方法
2014/05/18 Javascript
js实现带关闭按钮始终显示在网页最底部工具条的方法
2015/03/02 Javascript
jquery获取及设置outerhtml的方法
2015/03/09 Javascript
jQuery插件multiScroll实现全屏鼠标滚动切换页面特效
2015/04/12 Javascript
使用vue编写一个点击数字计时小游戏
2016/08/31 Javascript
JavaScript验证知识整理
2017/03/24 Javascript
JavaScript通过mouseover()实现图片变大效果的示例
2017/12/20 Javascript
JS严格模式知识点总结
2018/02/27 Javascript
解决vue 中 echart 在子组件中只显示一次的问题
2018/08/07 Javascript
Vue中使用方法、计算属性或观察者的方法实例详解
2018/10/31 Javascript
Angular(5.2-&gt;6.1)升级小结
2018/12/27 Javascript
vue elementui 实现搜索栏公共组件封装的实例代码
2020/01/20 Javascript
python通过pil模块获得图片exif信息的方法
2015/03/16 Python
python使用in操作符时元组和数组的区别分析
2015/05/19 Python
Python解决线性代数问题之矩阵的初等变换方法
2018/12/12 Python
对Tensorflow中tensorboard日志的生成与显示详解
2020/02/04 Python
Python3以GitHub为例来实现模拟登录和爬取的实例讲解
2020/07/30 Python
Python文件名匹配与文件复制的实现
2020/12/11 Python
css3实现垂直下拉动画菜单示例
2014/04/22 HTML / CSS
CSS3模拟IOS滑动开关效果
2016/09/28 HTML / CSS
简单说下OSPF的操作过程
2014/08/13 面试题
护理职业生涯规划书
2014/01/24 职场文书
机关道德讲堂实施方案
2014/03/15 职场文书
物流管理专业求职信
2014/05/29 职场文书
董事长助理工作职责
2014/06/08 职场文书
自动化专业大学生职业生涯规划范文:爱拚才会赢
2014/09/12 职场文书
酒店仓管员岗位职责
2015/04/01 职场文书
借条格式范本
2015/05/25 职场文书