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

 

 



1、session_id()对原来session文件和里面的数据,是怎么处理的?php

 



测验办法:
<?php

$sid = md5("aaad");
session_id($sid);
session_start();
var_dump(session_id());
$_SESSION['ddd'] = 123;


?>

web

 



是新建立一个session文件。

那么原来PHPSESSID对应的服务器上的数据就不会用到了,由于新建立了一个文件。

api

 

 

2、研究上面这个有什么用途?服务器

 

业务中须要cookie

 

 

问题的背景:
 * 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重置session

 

代码以下:app

<?phpcode

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');
}接口

 

?>md5

 

 

我想知道session_id()重置为指定的sid,有如下疑惑,解决这些疑惑以便评估对业务的影响:

重置为一个sid,是新建立一个session文件?仍是把原来的session文件重命名便可呢?

若是是新建立一个新的session文件,那么:php会对原来的磁盘上的session文件怎么处理呢?

 

 

经过上面的试验,答案为:

一、只是新建立一个session文件。并且是一个空文件。之前文件的数据并不会带到新文件中

二、原来的session文件并不会删除掉。保留在磁盘上。估计是垃圾回收机制的时候会自动删除?

 

 

 

3、顺便研究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());



相关文章
相关标签/搜索