session_id()和session_regenerate_id()对原来session文件和其中数据是怎么处理的
一、session_id()对原来session文件和里面的数据,是怎么处理的?
测验办法:
<?php
$sid = md5("aaad");
session_id($sid);
session_start();
var_dump(session_id());
$_SESSION['ddd'] = 123;
?>
是新创建一个session文件。
那么原来PHPSESSID对应的服务器上的数据就不会用到了,因为新创建了一个文件。
二、研究上面这个有什么用途?
业务中需要
问题的背景:
* um.mama.cn/passport 和passport.mama.cn都是访问新版本passport系统。
*
* 当app跳转到网页时,app先在打开的webview中,请求passport的一个接口。
* app>>>>>http://passport.mama.cn/appapi/setWebViewSession?app_code=xxx
* passport验证成功后,会设置webview为登录状态(即把登录状态存储到memcache)
*
* 但,网页访问的域名却是um.mama.cn/passport,两个域名不同,PHPSESSID就不同。之前设置的登录状态无法同步到um.mama.cn域名
*
* 目前思路是:登录状态是放在共享位置-memcache中,登录状态要想共享,让两个域名的PHPSESSID保持一样即可。同样的sid,可以去memcache查询数据。
*
* 具体做法是:
* app请求接口时,设置登录状态后,顺便将passport.mama.cn的sid备份到一个让passport.mama.cn也能读取的公共域名下:mama.cn
* 进入um.mama.cn时候,从mama.cn获取备份的sid,于是将um.mama.cn的sid重置
代码如下:
<?php
if(isset($_COOKIE['app_passport_login_sid']) && $_COOKIE['app_passport_login_sid']){
$sid = trim($_COOKIE['app_passport_login_sid']);
session_id($sid);
setcookie(session_name(), $sid, time()+86400, '/');
session_start();
//这个cookie用完毕后删除掉,避免影响
setcookie('app_passport_login_sid', $sid, time()-86400, '/','.mama.cn');
}
?>
我想知道session_id()重置为指定的sid,有以下疑惑,解决这些疑惑以便评估对业务的影响:
重置为一个sid,是新创建一个session文件?还是把原来的session文件重命名即可呢?
如果是新创建一个新的session文件,那么:php会对原来的磁盘上的session文件怎么处理呢?
通过上面的试验,答案为:
1、只是新创建一个session文件。而且是一个空文件。以前文件的数据并不会带到新文件中
2、原来的session文件并不会删除掉。保留在磁盘上。估计是垃圾回收机制的时候会自动删除?
三、顺便研究session_regenerate_id()对原来的session文件和数据的处理方式
只是将原来的文件名称重命名为一个新的么。这样数据还是在的。
session_regenerate_id() 在不修改当前会话中数据的前提下使用新的 ID 替换原有会话 ID。
delete_old_session
是否删除原 ID 所关联的会话存储文件。
这个看介绍:拷贝一份原来的session数据文件,然后重命名为一个新的sid名称
比如,session_sid1 新建了一个文件 session_sid2
原来的数据文件会带到新的session文件中去的。
测验办法:
session_start();
session_regenerate_id();
var_dump(session_id());
session_id()和session_regenerate_id()对原来session文件和其中数据是怎么处理的的更多相关文章
- PHP自带Session隐患(session文件独占锁引起阻塞)
PHP自带Session隐患(session文件独占锁引起阻塞) PHP默认的会话处理器是session.save_handler = files(即文件).如果同一个客户端同时并发发送多个请求(如a ...
- php session 阻塞 过期不自动清除session文件
php默认session session_start后,php就会打开session文件,然后同一时间用户再用那个session_id访问,就会被前面那个请求阻塞直到前面一个访问结束才会释放文件在使 ...
- 关于PHP中Session文件过多的问题
PHP的默认机制:每一次php请求,会有1/100的概率(默认值)触发“session回收”.如果“session回收”发生,那就会检查/tmp/sess_*的文件,如果最后的修改时间到现在超过了14 ...
- session文件无法并发操作
session_start():打开服务器上的session文件. session_commit():会把$_SESSION数组的内容写入到服务器上的session文件中,但不会清空$_SESSION ...
- 使用 session_destroy() 销毁session文件时 报 Trying to destroy uninitialized session 错误解决办法
在使用 sessio_destroy() 销毁session文件的时候,必须要先使用session_start() 来开启session 后才能删除session文件
- TF从文件中读取数据
从文件中读取数据 在TensorFlow中进行模型训练时,在官网给出的三种读取方式,中最好的文件读取方式就是将利用队列进行文件读取,而且步骤有两步: 把样本数据写入TFRecords二进制文件 从队列 ...
- SQLSERVER将一个文件组的数据移动到另一个文件组
SQLSERVER将一个文件组的数据移动到另一个文件组 有经验的大侠可以直接忽视这篇文章~ 这个问题有经验的人都知道怎麽做,因为我们公司的数据量不大没有这个需求,也不知道怎麽做实验 今天求助了QQ群里 ...
- [数据科学] 从csv, xls文件中提取数据
在python语言中,用丰富的函数库来从文件中提取数据,这篇博客讲解怎么从csv, xls文件中得到想要的数据. 点击下载数据文件http://seanlahman.com/files/databas ...
- .Net读取Excel文件时丢失数据的问题 (转载)
相信很多人都试过通过OleDB读取Excel文件,这种方法效率十分高,只是有一点会让人十分头痛,就是当一列中既有混合型数据,又有纯数据时,往往容易丢失数据. 百度过后,改连接字符串 “HDR=YES; ...
随机推荐
- BZOJ2596 : [Wc2007]疯狂赛车
根据光路最快原理以及斯涅尔定律,可以得到从定点$P$进入某条直线的最佳入射角. 求出每个端点到每条线段的最佳点,建图求最短路即可. 时间复杂度$O(n^2\log n)$. #include<c ...
- Html表单标签:
表单用于收集不同的类型的用户输入,表单由不同类型的标签组成,相关标签及属性如下: (1)<form>标签 定义整体的表单区域 -- action属性 定义表单数据提交址址 -- metho ...
- 初识hibernate——环境搭建
一 配置过程 1. 创建一个项目 2. 导包 required里的包 optional里的c3p0连接池的三个包 数据库驱动包 Junit 3.创建Hibernate的配置文件(hiberna ...
- db2 reorg详解
reorgchk,检查table index 是否需要重组.reorg 重组,重新放置数据位置.runstats 统计信息,可以优化查询器 一个完整的日常维护规范可以帮助 DBA 理顺每天需要的操作, ...
- Vue(八)发送跨域请求
使用vue-resource发送跨域请求 axios不支持跨域 1 安装vue-resource并引入 cnpm install vue-resource -S 2 基本用法 使用this.$http ...
- Accumulator<Long> implements of JavaSparkContext in Spark1.x
As we all know , up to Spark 1.6.2, JavaSparkContext only provides two kinds of accumulators: Intege ...
- web 和 java 资源
1.自己按照上面的网址和密码自己去下载都那些视频都是vip的视频现在下载免费 7-17JAVA开发搜索引擎自动提示[优效学院向天] 链接:http://pan.baidu.com/s/1bpEkfR ...
- float 浮点数与零值0比较大小 ZZ
float x: 千万不要写x==0; 写出float x 与“零值”比较的if语句——一道面试题分析 写出float x 与“零值”比较的if语句 请写出 float x 与“零值”比较的 if ...
- C#调用系统打印机和收银钱箱
打印示例: StringBuilder builder = new StringBuilder();builder.AppendLine("--------------打印测试------- ...
- dotnet ef
dotnet ef migrations add <Name-of-Migration> dotnet ef database update