文档章节

PHP的session

Mrseven
 Mrseven
发布于 2016/08/24 16:11
字数 1110
阅读 12
收藏 0

一、session与cookie的比较

    1、cookie是服务器在用户计算机中的小文件,用户通过浏览器请求页面时,同时发送cookie,并且信息以明文文本的形式保存。某些含有敏感、未加密的数据会影响网络的安全性。

    2、session 会话存储在服务器中,相对安全,不会像cookie 限制存储长度。

 

二、什么是session

    1、session的中文译为“会话”。是指一个终端用户与交互系统进行通信的时间间隔,通常指从注册进入系统到注销退出系统所经过的时间,因此session实际上是一个特定的时间概念

 

三、工作原理

    1、当启动session会话是,都会产生一个随机且唯一的session_id,也就是session的文件名,存储在服务器的内存中,当关闭session会话是,session_id 就会消失,当再次启动session会话,又会生成一个随机且唯一的session_id

 

四、session功能

    1、通过session保存用户相关的信息,如用户登录,使用session保存用户信息。

 

五、session的使用

    1、使用步骤:

            a、启动会话

            b、注册会话

            d、使用会话

            e、删除会话

 

    2、启动会话:

    两种方式  session_start()、session_register() 

    注意:要在页面的开始位置调用

    3、注册会话:

       $_SESSION['admin'] = 'zhangsan';

    4、使用会话:

     if (!empty($_SESSION['admin'])) {

        $username = $_SESSION['admin'];

    }

    5、删除会话

    unset($_SESSION['admin']);  一旦启动unset() 函数会将全局变量$_SESSION 销毁,而且没有办法将其恢复,用户也不能在注册$_SESSION 变量,如果要删除多个或全部会话,就使用下面两种方式

    $_SESSION = array();

    session_destroy();

 

六、设置失效时间

    1、客户端没有禁止cookie:

<?php
$time = 1*60;
session_set_cookie_params($time);
session_start();
$_SESSION['admin'] = 'admin'

    session_set_cookie_params() 必须在session_start() 之前调用,不推荐,此函数在一些浏览器上会出问题,所以一般手动设置失效时间。

session_start();
$time = 1*60;
setcookie(session_name(), session_id(), time() + $time, '/');
$_SESSION['admin'] = 'admin';

上面的程序session的失效时间和cookie的失效时间是一样。

2、客户端禁止cookie

    a、在使用之前提醒用户必须打开cookie。

    b、设置php.ini 文件中的session.use_trans_sid = 1, 或者编译时打开-enable-trans-sid 选项,让PHP自动跨页面传递session_id;

    c、通过get 方法,隐藏表单传递session_id

    d、使用文件或者数据库存储session_id ,在页面间传递中手动调用

 

七、session的存储位置

    1、在服务器中如果所有用户的session都保存到临时目录中,会降低服务器的安全性和效率,打开服务器存储的站点会非常慢,使用PHP函数session_save_path() 存储session临时文件,可缓解因临时文件的存储导致服务器效率降低和站点打开缓慢的问题

$path = '/temp/';   // 设置session存储路径
session_save_path($path);
session_start();
$_SESSION['admin'] = admin;

 

八、session缓存

    1、session的缓存是将网页中的内容临时存储到IE客户端的Temporary Internet Files 文件夹下,并且可以设置缓存时间。当第一次浏览网页后,网页的部分内容在规定的时间内就别临时存储在客户端的临时文件夹中,这样在下次访问这个页面时,就可以直接读取缓存中的内容,从而提高网站的浏览效率。

    session缓存的完成使用的是session_cache_limiter() 函数

string session_cache_limiter([string cache_limiter])

     参数cache_limiter 为public 或 private。 同时session缓存并不是指在服务端而是客户端,在服务器中没有显示。

    缓存时间的设置:

int session_cache_expire([int new_cache_expire]) // 单位是分钟

    2、session数据库存储

        通过改变session存储文件夹使session不至于将临时文件夹填满而造成站点瘫痪,当网站访问量大时,查询session_id 不是件容易的事情,就可以使用session 数据库存储,session_set_save_handler()函数。

bool session_set_save_handler(string open, string close, string read, string write, string destroy, string gc)

        参数说明:

                a、open(save_path, session_name)----找到session存储地址,去除变量名称

                 b、close() ------不去要参数,关闭数据库

                c、read(key) -----读取session的键值, key对应的session_id

                d、write(key, data) ----- data对应设置的session变量

                e、destroy(key) ----- 注销session对应session键值

                f、gc(expiry_time) ----- 清除过期的session记录

                此函数中的参数为6个函数,调用时只调用函数名称的字符串。

© 著作权归作者所有

上一篇: Promise
下一篇: git 错误
Mrseven
粉丝 0
博文 52
码字总数 39044
作品 0
朝阳
程序员
私信 提问
加载中

评论(0)

PHP Session原理分析

Session是以扩展的形式嵌入到PHP内核的,所以我们可以把Session当成扩展来看待。一般扩展被载入到PHP时会调用扩展的MINIT函数,Session也不例外,当Session被载入到PHP内核时,MINIT函数将会...

我不叫大脸猫
2012/09/13
828
7
php对session的存储以及回收

1、php中session的生成机制 我们先来分析一下PHP中是怎么生成一个session的。设计出session的目的是保持每一个用户的各种状态来弥补HTTP协议的不足(无状态)。我们现在有一个疑问,我们都知道...

stone_
2016/06/01
69
0
PHP中使用Redis接管文件存储Session详解

前言 php默认使用文件存储session,如果并发量大,效率会非常低。而redis对高并发的支持非常好,可以利用redis替换文件来存储session。 最近就遇到了这个问题,之前找了网上的一套直播系统给...

开元中国2015
2018/12/04
71
0
PHP _ session 详解

http协议是WEB服务器与客户端(浏览器)相互通信的协议,它是一种无状态协议。所谓无状态,指的是不会维护http请求数据,http请求是独立的,非持久的。而越来越复杂的WEB应用,需要保存一些用户...

喵王不瞌睡
2015/03/12
265
0
PHP中SESSION丢失(不能跨页面传递)解决办法

PHP中SESSION丢失(不能跨页面传递)解决办法 一般来说,使SESSION丢失有以下几点: 1、客户端禁用了cookie 2、浏览器无法存取cookie 3、php.ini中的session.usetranssid=0或编译时没有打开–...

技术小胖子
2017/11/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

一款提升IT运维工作效率的工具,你值得拥有!

IT运维的工作内容主要是负责服务器硬件配置、独立主机或虚拟化产品的开通维护、服务器日常运行监控和管理等,具体的要看企业对这个岗位的要求。 而像运维这样的岗位,我个人是推荐可以使用一...

欢乐马在开源
40分钟前
48
0
IDEA 多线程Debug

一、问题描述 在idea中的进行调试时,代码中有多线程,想对线程中的代码进行跟踪,代码如下: for (int i = 0; i < 5; i++) { final int index = i; exec...

Airship
45分钟前
37
0
jenkins 插件加速

参考:https://my.oschina.net/VASKS/blog/3106314 主要是自己创建一个nginx, 让jenkins从清华源下载。 以下是创建nginx的Dockerfile Dockerfile FROM nginxADD nginx.conf /etc/nginx/ngi......

杰仪
45分钟前
55
0
五分钟自学编程:怎样才能学好笔试面试最爱考察的算法

原创声明 本文作者:黄小斜 转载请务必在文章开头注明出处和作者。 本文思维导图 什么是算法 上回我们有一篇文章,讲述了作为一个新人程序员,如何学习数据结构这门课程,其实呢,数据结构和...

黄小斜
49分钟前
42
0
面试题 11:旋转数组的最小数字

题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋...

Oaki
55分钟前
50
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部