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());
转载于:https://www.cnblogs.com/wangtao_20/p/4898893.html
session_id()和session_regenerate_id()对原来session文件和其中数据是怎么处理的相关推荐
- session文件无法并发操作
session_start():打开服务器上的session文件. session_commit():会把$_SESSION数组的内容写入到服务器上的session文件中,但不会清空$_SESSION ...
- 关于PHP中Session文件过多的问题
PHP的默认机制:每一次php请求,会有1/100的概率(默认值)触发"session回收".如果"session回收"发生,那就会检查/tmp/sess_*的 ...
- php启动 大量sess文件,关于PHP中Session文件过多的问题
PHP的默认机制:每一次php请求,会有1/100的概率(默认值)触发"session回收".如果"session回收"发生,那就会检查/tmp/sess_*的 ...
- 使用 session_destroy() 销毁session文件时 报 Trying to destroy uninitialized session 错误解决办法
在使用 sessiodestroy() 销毁session文件的时候,必须要先使用sessionstart() 来开启session 后才能删除session文件
- php session位置,关于PHP中Session文件过多的问题及session文件保存位置
PHP的默认机制:每一次php请求,会有1/100的概率(默认值)触发"session回收".如果"session回收"发生,那就会检查/tmp/sess_*的 ...
- php 删除 session 文件,如何删除php中的session文件
如何删除php中的session文件 发布时间:2020-07-23 17:18:57 来源:亿速云 阅读:106 作者:Leah 如何删除php中的session文件?相信很多没有经验的人对此束手无 ...
- php启动 大量sess文件,关于PHP中Session文件过多的有关问题
关于PHP中Session文件过多的问题 PHP的默认机制:每一次php请求,会有1/100的概率(默认值)触发"session回收".如果"session回收" ...
- php session_id 生成规则,php中Session的生成机制、回收机制和存储机制探究
1.php中session的生成机制 我们先来分析一下PHP中是怎么生成一个session的.设计出session的目的是保持每一个用户的各种状态来弥补HTTP协议的不足(无状态).我们现在有一个疑问 ...
- php获取session路径,php session文件修改路径
默认状态下php的 sess_文件会生成到/tmp目录下,1天的时间就会生成很多,由于/tmp目录下还有别的重要文件,所以看起来不爽.具体更改做法是,找到 php.ini文件里面的 session.s ...
最新文章
- linux快捷上传下载文件
- Logback配置文件这么写,TPS提高10倍
- 人群密度估计--CrowdNet: A Deep Convolutional Network for Dense Crowd Counting
- Vue 路由 过渡动效 数据获取
- 打印函数如何适应不同的打印机
- redis-数据类型与应用
- C语言必知的几个概念
- java单例模式双重检查
- 基于java的银行综合业务柜台系统设计与实现(含源文件)
- Maven引用本地jar并在打war包时引用jar
- C 语言实例 - 判断奇数/偶数
- sentinel 时间窗口_sentinel 滑动窗口统计机制
- 超好看的css动画特效实现
- 叔本华系列之(一)论独立的思考
- 【重庆SEO教程】如何诊断一个网站SEO优化的好坏
- 解析几何----拉格朗日乘数法在解析几何中的应用
- 山东大学计算机学院李庆忠,研究生导师李庆忠:山东大学
- 【移动安全】315钓鱼Wifi获取个人信息的深入剖析
- GooFlow Web UI流程图插件
- Oracle EBS Workflow 下载/上传