我们在前面的文章里面讲到session的原理和最佳实践,感到意犹未尽。现在再来聊下PHP Session用到的几个相关的函数。

session_start()

session_start() 会创建新会话或者重用现有会话。 如果通过 GET 或者 POST 方式,或者使用 cookie 提交了会话 ID, 则会重用现有会话。

当会话自动开始或者通过 session_start() 手动开始的时候, PHP 内部会调用会话管理器的 open 和 read 回调函数。 会话管理器可能是 PHP 默认的, 也可能是扩展提供的(SQLite 或者 Memcached 扩展), 也可能是通过 session_set_save_handler() 设定的用户自定义会话管理器。 通过 read 回调函数返回的现有会话数据(使用特殊的序列化格式存储), PHP 会自动反序列化数据并且填充 $_SESSION 超级全局变量。

要想使用命名会话,请在调用 session_start() 函数 之前调用 session_name() 函数。

如果启用了 session.use_trans_sid 选项, session_start() 函数会注册一个内部输出管理器, 该输出管理器完成 URL 重写的工作。

注意:要使用基于 cookie 的会话, 必须在输出开始之前调用 session_start() 函数。

session_unset()

销毁当前会话数据。或者$_SESSION = array(); 如果要销毁个别会话数据,可以unset ($_SESSION['varname']);.

session_destroy()

和session_unset()销毁所有会话数据不同,session_destroy()销毁的是会话本身,此函数一出,当前session就变成垃圾了,等待gc机制去回收它。但是它并不会重置当前会话所关联的全局变量, 也不会重置会话 cookie。该有的会话数据还是在,只不过“身份”变了而已。如果gc尚且还没有去回收它,那么它仍然是可以读取到的,这当然是不愿意看到的,因此在session_destroy() 之前往往还要session_unset()一下。

如果需要再次使用会话变量, 必须重新调用 session_start() 函数。 为了彻底销毁会话,比如在用户退出登录的时候,必须同时重置会话 ID。 如果是通过 cookie 方式传送会话 ID 的,那么同时也需要 调用 setcookie() 函数来 删除客户端的会话 cookie。

下面例子是销毁数据本身:

// 初始化会话。

// 如果要使用会话,别忘了现在就调用:

session_start();

// 重置会话中的所有变量,销毁会话数据

$_SESSION = array(); // 或者session_unset()

// 如果要清理的更彻底,那么同时删除会话 cookie

// 注意:这样不但销毁了会话中的数据,还同时销毁了会话本身

if (ini_get("session.use_cookies")) {

$params = session_get_cookie_params();

setcookie(session_name(), '', time() - 42000,

$params["path"], $params["domain"],

$params["secure"], $params["httponly"]

);

}

// 最后,销毁会话

session_destroy();

销毁会话数据$_SESSION = array() 或session_unset() ;销毁会话本身session_destroy();和setcookie()。session_destroy()执行后会话就变成垃圾会话,等待gc机制回收。

session_commit()

session_commit() 是 session_write_close()别称。和session_start相反,这是写和关闭。即保存当前session数据,并且关闭当前会话。为了防止并发的写session,任何时刻只能允许有一个PHP脚本在操作session,因此,一个脚本一旦session_start打开session,那么在此脚本终止或者调用session_write_close()之前,别的任何脚本都不能使用session。在默认情况下脚本结束时会自动写入和关闭session,但是在脚本执行时间比较长的时候,此脚本就一致占据锁使得别的脚本无法使用session,因此导致许多错误。因此,最佳实践是,任何session变量,数据的更改(如$_SESSION[xx] = xxx),都要及时使用session_commit()保存数据,关闭会话。

session_id ()

session_id() 可以用来获取/设置 当前会话 ID。 为了能够将会话 ID 很方便的附加到 URL 之后, 你可以使用常量 SID 获取以字符串格式表达的会话名称和 ID。简单说,就是如果你开启的是POST/GET方式获取会话ID,那么这个参数可以通过session.use_trans_sid设定并在URL中看得见,而在脚本中通过全局变量SID来直接获取。

//配置

ini_set('session.use_trans_sid', 'sid');

//url中表现

127.0.0.1?sid=xxxxx

//直接获取

$sid = SID;

如果指定了 session_id () 参数的值, 则使用指定值作为会话 ID。 必须在调用 session_start() 函数之前调用 session_id() 函数。不同的会话管理器对于会话 ID 中可以使用的字符有不同的限制。 如果当前没有会话,则返回空字符串("")。

这里有两点值得注意下:

如果使用 cookie 方式传送会话 ID,并且指定了 id 参数, 在调用 session_start() 之后都会向客户端发送新的 cookie, 无论当前的会话 ID 和新指定的会话 ID 是否相同

在通过session_id ($id )切换当前会话ID之前,需要通过session_commit()来关闭上一个会话,否则当前会话还是原来的

更多的函数可以参看PHP官网或者手册。

php 常用session函数,PHP Session 常用的函数相关推荐

  1. oracle v$context,30.Oracle杂记——Oracle常用动态视图v$session

    30.Oracle杂记--Oracle常用动态视图v$session 视图v$session:有关会话的信息 这个视图包含了超级多的列,说明其包含巨大的信息,小伙伴千万要记得使用,不然浪费掉了ORAC ...

  2. PBR中BRDF常用的各类法线分布函数、几何函数总结(unity)

    PBR中BRDF常用的各类法线分布函数.几何函数总结 一,法线分布函数(Normal Distribution Function,NDF) 1.1 各项同性NDF总结 1.1.1Blinn-Phong ...

  3. python3常用函数大全_Python3NumPy——常用函数

    Python3NumPy的常用函数 1. txt文件 (1) 单位矩阵,即主对角线上的元素均为1,其余元素均为0的正方形矩阵. 在NumPy中可以用eye函数创建一个这样的二维数组,我们只需要给定一个 ...

  4. python常用内置函数总结-Python 常用内置函数

    Python 常用内置函数如下: 1. abs()函数返回数字的绝对值. print( abs(-45) )# 返回45print("abs(0.2):",abs(0.2))#返回 ...

  5. 在malloc函数中为什么常用sizeof来设定内存分配的大小?

    在malloc函数中为什么常用sizeof来设定内存分配的大小? 例子:为40个整数变量分配内存并赋值,然后系统在收回这些内存. #include<stdlib.h> #include&l ...

  6. java lambda函数_最常用的 Java 8 中的 Lambda 函数(项目中实用笔记)

    最常用的 Java 8 中的 Lambda 函数(项目中实用笔记) 简介 Java 8 中的新特性,虽然现在都出到了Java14版本,不过在日常的开发过程中,8的版本是足够使用了,再说现在的8以上的版 ...

  7. js中当等于最小值是让代码不执行_网页中JS函数自动执行常用三种方法

    本文为大家分享了在网页中JS函数自动执行常用方法,供大家参考,具体内容如下 一.JS方法 1.最简单的调用方式,直接写到html的body标签里面: 2.在JS语句调用: function myfun ...

  8. oracle常用函数api,Oracle-API OracleAPI、oracle10G函数大全(常用函数)、 联合开发网 - pudn.com...

    Oracle-API 所属分类:Oracle数据库 开发工具:SQL 文件大小:13650KB 下载次数:20 上传日期:2013-09-03 13:09:39 上 传 者:蓝 说明:  Oracle ...

  9. 字符串与字符串函数 - 字符串输出 常用字符串函数

    一.字符串输出函数 1.puts() 函数 使用较为简单,只需要将字符串的地址作为参数进行传递即可. #include <sthio,h> #define DEF "I am a ...

  10. 计算机应用常用的30个函数,Excel中常用函数的使用

    ISSN 1009-30" 咖船r Kno别b内e and伯叻肋叻电奠知识'i技术 V01.6,No.30,October20lO,pP.8523-8524E-mail:x8jl@cccc. ...

最新文章

  1. k-means聚类算法从入门到精通
  2. 天天都会写接口,但它的用途和好处有多少人能说得清楚?
  3. Activity学习(一):生命周期
  4. 【雷达对抗】频率测量与频谱分析-概述
  5. 计算机主机后面辐射大,电脑的背面辐射大吗
  6. 3层vni vxlan_方便业务迁移,大型企业数据中心VXLAN大二层基础,一分钟了解下
  7. Java常用接口与类——基本数据类型的包装类
  8. 阅读go语言程序设计
  9. C模拟实现点分十进制IP转换
  10. oppo计算机锁屏快捷键,oppo一键锁屏方法【图文教程】
  11. 世界上最早的手动计算机,世界上第一台电子计算机诞生于多少年,名字叫做什么...
  12. python爬虫简单入门级,小白讲说
  13. Laravel + Elasticsearch 实现中文搜索
  14. discard是什么意思啊(discard是什么意思翻译)
  15. 从打车到专车,滴滴们除了烧钱还有什么?
  16. 小企业仓库管理软件设计开发
  17. nginx 服务器重启命令 关闭
  18. JDBC中的statement、executeQuery()、SQL injection attacks注入式攻击、preparedStatement
  19. 用链表实现对二进制数加1的运算
  20. 计算机考研英语复试自我介绍范文,2016考研复试英语自我介绍12篇范文

热门文章

  1. Java DNS查询内部实现
  2. C# Redis实战(六)
  3. 装在u盘的linux
  4. 如何查看指定端口.(win)
  5. python 中sys.stdout.write 和 print sys.stdout的区别(转)
  6. redis主从复制实验,使用ruby
  7. 无线路由器桥接与覆盖
  8. Web Application Stress Tool(WAS)性能测试
  9. matlab 图像读取长宽_MATLAB图像处理基本操作
  10. layer的一种用法,自己画出弹出框样式