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中使用Oracle数据库(2)
Oct 09 PHP
php 生成静态页面的办法与实现代码详细版
Feb 15 PHP
PHP中foreach循环中使用引用要注意的地方
Jan 02 PHP
解析PHP中数组元素升序、降序以及重新排序的函数
Jun 20 PHP
php实现mysql封装类示例
May 07 PHP
php计算程序运行时间的简单例子分享
May 10 PHP
PHP中的reflection反射机制测试例子
Aug 05 PHP
php单链表实现代码分享
Jul 04 PHP
laravel框架select2多选插件初始化默认选中项操作示例
Feb 18 PHP
php+iframe 实现上传文件功能示例
Mar 04 PHP
php实现简易计算器
Aug 28 PHP
PHP数组实际占用内存大小原理解析
Dec 11 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
优化使用mysql存储session的php代码
2008/01/10 PHP
PHP运行模式的深入理解
2013/06/03 PHP
PHP判断远程图片是否存在的几种方法
2014/05/04 PHP
PHP实现获取域名的方法小结
2014/11/05 PHP
php函数重载的替代方法--伪重载详解
2015/05/08 PHP
可输入的下拉框
2006/06/19 Javascript
JQuery 常用操作代码
2010/03/14 Javascript
jquery的键盘事件修改代码
2011/02/24 Javascript
推荐11款jQuery开发的复选框和单选框美化插件
2011/08/02 Javascript
js自动下载文件到本地的实现代码
2013/04/28 Javascript
jQuery查询数据返回object和字符串影响原因是什么
2013/08/09 Javascript
Javascript实现页面跳转的几种方式分享
2013/10/26 Javascript
jQuery判断checkbox(复选框)是否被选中以及全选、反选实现代码
2014/02/21 Javascript
js打造数组转json函数
2015/01/14 Javascript
jquery实现简单文字提示效果
2015/12/02 Javascript
JSON字符串和对象相互转换实例分析
2016/06/16 Javascript
Node.js开发教程之基于OnceIO框架实现文件上传和验证功能
2016/11/30 Javascript
常用的javascript设计模式
2017/01/11 Javascript
jQuery实现表格奇偶行显示不同背景色 就这么简单
2017/03/13 Javascript
详解Angular2响应式表单
2017/06/14 Javascript
JS 验证码功能的三种实现方式
2018/11/26 Javascript
微信小程序自定义键盘 内部虚拟支付
2018/12/20 Javascript
layui框架与SSM前后台交互的方法
2019/09/12 Javascript
解决三元运算符 报错“SyntaxError: can''t assign to conditional expression”
2020/02/12 Javascript
Nodejs文件上传、监听上传进度的代码
2020/03/27 NodeJs
Python 中字符串拼接的多种方法
2018/07/30 Python
python引入不同文件夹下的自定义模块方法
2018/10/27 Python
Flask之请求钩子的实现
2018/12/23 Python
Python基础学习之基本数据结构详解【数字、字符串、列表、元组、集合、字典】
2019/06/18 Python
Python3 执行Linux Bash命令的方法
2019/07/12 Python
优秀毕业生自我鉴定
2014/01/19 职场文书
2015年财务工作总结范文
2015/03/31 职场文书
MySQL主从复制断开的常用修复方法
2021/04/07 MySQL
浅谈如何提高PHP代码质量之单元测试
2021/05/28 PHP
python实现局部图像放大
2021/11/17 Python
微前端qiankun改造日渐庞大的项目教程
2022/06/21 Javascript