php save handler,PHP使用session_set_save_handler陷阱

陷阱如下

当脚本使用了session_set_save_handler 来重定向 session后,使用session_destroy后再使用session_start()重新开启session会报错

代码如下,

function open() {

echo 'session start';

echo "\n";

}

function close() {

echo 'session close';

echo "\n";

}

function read($sessionId) {

echo 'read'.$sessionId;

echo "\n";

}

function write($sessionId, $data) {

echo 'write'.$sessionId.$data;

echo "\n";

}

function destroy($sessionId) {

echo 'destroy '.$sessionId;

echo "\n";

}

function gc($lifetime) {

echo 'gcccc';

echo "\n";

}

session_set_save_handler('open', 'close', 'read', 'write', 'destroy', 'gc');

session_start();

echo session_id();

echo "\n";

session_destroy();

session_start();

$id = 'h06vgdfdfve6b8f66sva6basf8';

session_id($id);

echo session_id();

运行后报错

Fatal error: session_start() [function.session-start]: Failed to initialize storage module: user (path: /var/lib/php/session) in /home/user/site/session.php on line 39

屏蔽session_set_save_handler('open', 'close', 'read', 'write', 'destroy', 'gc');

正常流程下(使用原生session)错误不会再出现。

so..

如果网站要使用自定义session建议自己封装和直接使用相关函数, 绕开session_set_save_handler

你可能不知道的陷阱, IEnumerable接口

1.  IEnumerable 与  IEnumerator IEnumerable枚举器接口的重要性,说一万句话都不过分.几乎所有集合都实现了这个接口,Linq的核心也依赖于这个万能的接口.C语言的 ...

java笔记--笔试中极容易出错的表达式的陷阱

我相信每一个学过java的人儿们都被java表达式虐过,各种"肯定是它,我不可能错!",然后各种"尼玛,真假,怎么可能?",虽然在实际开发中很少会真的让你去使用 ...

【Swift】iOS UICollectionView 计算 Cell 大小的陷阱

前言 API 不熟悉导致的问题,想当然的去理解果然会出问题,这里记录一下 UICollectionView 使用问题. 声明  欢迎转载,但请保留文章原始出处:)  博客园:http://www.cn ...

JavaScript中的this陷阱的最全收集

JavaScript来自一门健全的语言,所以你可能觉得JavaScript中的this和其他面向对象的语言如java的this一样,是指存储在实例属性中的值.事实并非如此,在JavaScript中,最 ...

高性能MySQL(四):schema陷阱

一.schema陷阱 二.缓存表和汇总表 三.范式和反范式

C#_闭包陷阱

如果匿名方法(Lambda表达式)引用了某个局部变量,编译器就会自动将该引用提升到该闭包对象中. 即将for循环中的变量i修改成了引用闭包对象的公共变量i.这样一来,即使代码执行后离开了原局部变量i的 ...

安装 Linux 时碰到的硬盘分区的陷阱及应对

硬盘分区的陷阱及应对 之所以想到写这篇,是因为本人在折腾 Linux 系统的过程中,有多次掉入硬盘分区的陷阱的经历.最近几天,再一次掉入坑中,折腾了两天才从坑中爬出来.经过多方查询资料,终于弄明白了硬 ...

NULL的陷阱:Merge

NULL表示unknown,不确定值,所以任何值(包括null值)和NULL值比较都是不可知的,在on子句,where子句,Merge或case的when子句中,任何值和null比较的结果都是fals ...

洛谷P1156 垃圾陷阱[背包DP]

题目描述 卡门――农夫约翰极其珍视的一条Holsteins奶牛――已经落了到“垃圾井”中.“垃圾井”是农夫们扔垃圾的地方,它的深度为D(2<=D<=100)英尺. 卡门想把垃圾堆起来,等到 ...

随机推荐

php调试局部错误强制输出 display&lowbar;errors

error_reporting(E_ALL); ini_set('display_errors', '1'); ini_set('error_log', dirname(__FILE__) . '/e ...

216&period; Combination Sum III——本质DFS

Find all possible combinations of k numbers that add up to a number n, given that only numbers from ...

使用 VisualVM 进行性能分析及调优

VisualVM 是一款免费的性能分析工具.它通过 jvmstat.JMX.SA(Serviceability Agent)以及 Attach API 等多种方式从程序运行时获得实时数据,从而进行动态 ...

ABP框架 - N层架构

目录 介绍 DDD分层 ABP架构模型 客户端 展现层 分布式服务层 应用层 领域层 基础设施层 介绍 在应用程序设计中,分层架构是一种被广泛使用的技术,它助于降低复杂度和提高代码的可重用性.在ABP ...

Java集合类的底层实现探索

List: ArrayList 首先我们来看看jdk的ArrayList的add方法的源码是如何实现的: public boolean add(E e) { ensureCapacityInterna ...

【openssl】利用openssl完成X509证书和PFX证书之间的互转

利用openssl完成X509证书和PFX证书之间的互转 # OpenSSL的下载与安装: 1.下载地址: 官方网址—— https://www.openssl.org/source/ OpenSSL ...

Mac上配置idea的项目上传到GitHub

1.安装git,Mac默认已经安装了Git,可以通过命令git —version查询一下. 2.创建SSH KEY(如果已经创建过,则不用再次创建.查看~/.ssh/id_rsa.pub是否存在) 生 ...

nmap扫描出现tcpwrapped

FAQ tcpwrapped From SecWiki Jump to: navigation, search What does "tcpwrapped" mean? tcpwr ...

Jquery&lowbar;artDialog对话框弹出

artDialog是一个基于javascript编写的对话框组件,它拥有精致的界面与友好的接口l  自适应内容artDialog的特殊UI框架能够适应内容变化,甚至连外部程序动态插入的内容它仍然能自适 ...

ios 线程同步

https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/Multithreading/ThreadSafe ...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值