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 Mysql类 可以参考学习熟悉下
Jun 21 PHP
认识并使用PHP超级全局变量
Jan 26 PHP
PHP操作数组的一些函数整理介绍
Jul 17 PHP
ThinkPHP使用smarty模板引擎的方法
Jul 01 PHP
PHP面向对象精要总结
Nov 07 PHP
php中序列化与反序列化详解
Feb 13 PHP
phpstudy默认不支持64位php的解决方法
Feb 20 PHP
php使用ftp实现文件上传与下载功能
Jul 21 PHP
PHP中TP5 上传文件的实例详解
Jul 31 PHP
PHP convert_cyr_string()函数讲解
Feb 13 PHP
PHP常见的几种攻击方式实例小结
Apr 29 PHP
php设计模式之组合模式实例详解【星际争霸游戏案例】
Mar 27 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
德生PL990的分析评价
2021/03/02 无线电
PHP冒泡算法详解(递归实现)
2014/11/10 PHP
PHP人民币金额转大写实例代码
2015/10/02 PHP
用javascript获得地址栏参数的两种方法
2006/11/08 Javascript
JS实现方向键切换输入框焦点的方法
2015/08/19 Javascript
AngularJS中实现用户访问的身份认证和表单验证功能
2016/04/21 Javascript
JavaScript函数节流的两种写法
2017/04/07 Javascript
学习使用Bootstrap栅格系统
2017/05/11 Javascript
Layui table 组件的使用之初始化加载数据、数据刷新表格、传参数
2017/09/11 Javascript
angular4自定义组件详解
2017/09/28 Javascript
微信小程序使用radio显示单选项功能【附源码下载】
2017/12/11 Javascript
webpack打包nodejs项目的方法
2018/09/26 NodeJs
javaScript实现游戏倒计时功能
2018/11/17 Javascript
vue如何在项目中调用腾讯云的滑动验证码
2020/07/15 Javascript
vue 页面回退mounted函数不执行的解决方案
2020/07/26 Javascript
[35:27]完美世界DOTA2联赛循环赛 GXR vs FTD BO2第二场 10.29
2020/10/29 DOTA
python 打印出所有的对象/模块的属性(实例代码)
2016/09/11 Python
python运行其他程序的实现方法
2017/07/14 Python
python进阶_浅谈面向对象进阶
2017/08/17 Python
python逆序打印各位数字的方法
2018/06/25 Python
Tornado Web Server框架编写简易Python服务器
2018/07/28 Python
Python读取Excel表格,并同时画折线图和柱状图的方法
2018/10/14 Python
Python3爬虫爬取英雄联盟高清桌面壁纸功能示例【基于Scrapy框架】
2018/12/05 Python
在python中使用requests 模拟浏览器发送请求数据的方法
2018/12/26 Python
10 分钟快速入门 Python3的教程
2019/01/29 Python
Python3自定义json逐层解析器代码
2020/05/11 Python
python3.6.8 + pycharm + PyQt5 环境搭建的图文教程
2020/06/11 Python
基于Python采集爬取微信公众号历史数据
2020/11/27 Python
详解HTML5新增标签
2017/11/27 HTML / CSS
全球最大的服务市场:Fiverr
2017/01/03 全球购物
中英文自我评价常用句型
2013/12/19 职场文书
服务员岗位职责
2014/01/29 职场文书
生物科学专业职业规划书范文
2014/02/11 职场文书
保密协议书范本
2014/04/22 职场文书
群众路线教师自我剖析材料
2014/09/29 职场文书
2015年中秋节演讲稿
2015/03/20 职场文书