开发者社区> wangtaotao> 正文

session_id()和session_regenerate_id()对原来session文件和其中数据是怎么处理的

简介:   一、session_id()对原来session文件和里面的数据,是怎么处理的?   测验办法:   是新创建一个session文件。那么原来PHPSESSID对应的服务器上的数据就不会用到了,因为新创建了一个文件。
+关注继续查看

 

 



一、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());



 

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
一份经过时间检验的 Laravel PHPUnit 测试经验分享
一份经过时间检验的 Laravel PHPUnit 测试经验分享
3 0
JUC并发编程——锁
JUC并发编程——锁
4 0
JUC并发编程——深入了解synchronized关键字
JUC并发编程——深入了解synchronized关键字
5 0
(Redis使用系列) Springboot 使用Redis+Session实现Session共享 ,简单的单点登录 五
(Redis使用系列) Springboot 使用Redis+Session实现Session共享 ,简单的单点登录 五
4 0
JUC并发编程——ThreadLocal
JUC并发编程——ThreadLocal
4 0
Mysql数据查询优化——索引的数据结构
Mysql数据查询优化——索引的数据结构
3 0
最适合入门的Laravel中级教程(五)Passport OAuth认证
最适合入门的Laravel中级教程(五)Passport OAuth认证
2 0
最适合入门的Laravel中级教程(四)前端开发
最适合入门的Laravel中级教程(四)前端开发
4 0
关于自增id 你可能还不知道
在使用MySQL建表时,我们通常会创建一个自增字段(AUTO_INCREMENT),并以此字段作为主键。本篇文章将以问答的形式讲述关于自增id的一切。 注: 本文所讲的都是基于Innodb存储引擎。
3 0
【MySQL】explicit_defaults_for_timestamp 参数详解
explicit_defaults_for_timestamp 系统变量决定MySQL服务端对timestamp列中的默认值和NULL值的不同处理方法。此变量自MySQL 5.6.6 版本引入,分为全局级别和会话级别,可动态更新,默认值为OFF。本文主要介绍该参数打开和关闭情况下对timestamp的影响 。
3 0
+关注
wangtaotao
专注于互联网系统设计
167
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载