一、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文件和其中数据是怎么处理的的更多相关文章

  1. PHP自带Session隐患(session文件独占锁引起阻塞)

    PHP自带Session隐患(session文件独占锁引起阻塞) PHP默认的会话处理器是session.save_handler = files(即文件).如果同一个客户端同时并发发送多个请求(如a ...

  2. php session 阻塞 过期不自动清除session文件

     php默认session session_start后,php就会打开session文件,然后同一时间用户再用那个session_id访问,就会被前面那个请求阻塞直到前面一个访问结束才会释放文件在使 ...

  3. 关于PHP中Session文件过多的问题

    PHP的默认机制:每一次php请求,会有1/100的概率(默认值)触发“session回收”.如果“session回收”发生,那就会检查/tmp/sess_*的文件,如果最后的修改时间到现在超过了14 ...

  4. session文件无法并发操作

    session_start():打开服务器上的session文件. session_commit():会把$_SESSION数组的内容写入到服务器上的session文件中,但不会清空$_SESSION ...

  5. 使用 session_destroy() 销毁session文件时 报 Trying to destroy uninitialized session 错误解决办法

    在使用  sessio_destroy() 销毁session文件的时候,必须要先使用session_start()   来开启session 后才能删除session文件

  6. TF从文件中读取数据

    从文件中读取数据 在TensorFlow中进行模型训练时,在官网给出的三种读取方式,中最好的文件读取方式就是将利用队列进行文件读取,而且步骤有两步: 把样本数据写入TFRecords二进制文件 从队列 ...

  7. SQLSERVER将一个文件组的数据移动到另一个文件组

    SQLSERVER将一个文件组的数据移动到另一个文件组 有经验的大侠可以直接忽视这篇文章~ 这个问题有经验的人都知道怎麽做,因为我们公司的数据量不大没有这个需求,也不知道怎麽做实验 今天求助了QQ群里 ...

  8. [数据科学] 从csv, xls文件中提取数据

    在python语言中,用丰富的函数库来从文件中提取数据,这篇博客讲解怎么从csv, xls文件中得到想要的数据. 点击下载数据文件http://seanlahman.com/files/databas ...

  9. .Net读取Excel文件时丢失数据的问题 (转载)

    相信很多人都试过通过OleDB读取Excel文件,这种方法效率十分高,只是有一点会让人十分头痛,就是当一列中既有混合型数据,又有纯数据时,往往容易丢失数据. 百度过后,改连接字符串 “HDR=YES; ...

随机推荐

  1. Redis自学笔记:4.2进阶-过期时间

    4.2过期时间 **4.2.1命令介绍* 在redis中使用 expire 命令设置一个键的过期时间后redis会自动删除它. expire key seconds (seconds单位是秒,必须是整 ...

  2. ARC101E - Ribbons on Tree

    题目链接 ARC101E - Ribbons on Tree 题解 令边集\(S \subseteq E\) 设\(f(S)\)为边集S中没有边被染色的方案数 容斥一下,那么\(ans = \sum_ ...

  3. Scrapy基础(五) ------css选择器基础

    基本语法: *                  选择所有节点#container         选择id为container的节点.container      选择所有class包含contai ...

  4. 潭州课堂25班:Ph201805201 爬虫高级 第十三 课 代理池爬虫检测部分 (课堂笔记)

    1,通过爬虫获取代理 ip ,要从多个网站获取,每个网站的前几页2,获取到代理后,开进程,一个继续解析,一个检测代理是否有用 ,引入队列数据共享3,Queue 中存放的是所有的代理,我们要分离出可用的 ...

  5. spring 空指针报错,Could not create connection to database server.

    驱动问题,换成最近版本的mysql驱动

  6. CY7C68013 USB接口相机开发记录 - 第三天:固件修改

    上篇说了驱动怎么配置,这篇记录下对应的设备固件怎么配置.首先看下我们工程结构: 摘自官方文档AN61345 STARTUP.A51是建立工程时自动生成的文件,下面所有文件都是手动添加的.对于下面的几个 ...

  7. 原生js实现清除子元素节点

    var table = document.body.querySelector('.mui-table-view'); while(table.hasChildNodes()) //当table下还存 ...

  8. 登录页面加密token和盐的作用

    盐: 可以说盐是作用于注册,盐就是将用户输入的原始密码,加密后存进数据库,然后把盐(实际上是随机字符串)也存进数据库 Map<String, String> map = new HashM ...

  9. Redis开启AOF导致的删库事件

    事件背景 Redis主从开启AOF,错误操作导致数据被清空. Redis主要作用:缓存.队列. 事故过程 Redis搭建了主从,持久化方式为RDB,RDB没有定时备份,且AOF都没有开启. 考虑到开启 ...

  10. 本地文件上传GitHub

    (1)mkdir 项目名称(2)cd  项目名称(3)git init 把它变成可管理的Git仓库(4)git status 查看状态(5)git add . 点用空格隔开(6)git status ...