session_id()和session_regenerate_id()对原来session文件和其中数据是怎么处理的
?
?
一、session_id()對原來session文件和里面的數(shù)據(jù),是怎么處理的?
?
測驗辦法:
<?php
$sid = md5("aaad");
session_id($sid);
session_start();
var_dump(session_id());
$_SESSION['ddd'] = 123;
?>
?
是新創(chuàng)建一個session文件。
那么原來PHPSESSID對應(yīng)的服務(wù)器上的數(shù)據(jù)就不會用到了,因為新創(chuàng)建了一個文件。
?
?
二、研究上面這個有什么用途?
?
業(yè)務(wù)中需要
?
?
問題的背景:
?* um.mama.cn/passport 和passport.mama.cn都是訪問新版本passport系統(tǒng)。
?*
?* 當(dāng)app跳轉(zhuǎn)到網(wǎng)頁時,app先在打開的webview中,請求passport的一個接口。
?* app>>>>>http://passport.mama.cn/appapi/setWebViewSession?app_code=xxx
?* passport驗證成功后,會設(shè)置webview為登錄狀態(tài)(即把登錄狀態(tài)存儲到memcache)
?*
?* 但,網(wǎng)頁訪問的域名卻是um.mama.cn/passport,兩個域名不同,PHPSESSID就不同。之前設(shè)置的登錄狀態(tài)無法同步到um.mama.cn域名
?*
?* 目前思路是:登錄狀態(tài)是放在共享位置-memcache中,登錄狀態(tài)要想共享,讓兩個域名的PHPSESSID保持一樣即可。同樣的sid,可以去memcache查詢數(shù)據(jù)。
?*
?* 具體做法是:
?* app請求接口時,設(shè)置登錄狀態(tài)后,順便將passport.mama.cn的sid備份到一個讓passport.mama.cn也能讀取的公共域名下:mama.cn
?* 進(jìn)入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,有以下疑惑,解決這些疑惑以便評估對業(yè)務(wù)的影響:
重置為一個sid,是新創(chuàng)建一個session文件?還是把原來的session文件重命名即可呢?
如果是新創(chuàng)建一個新的session文件,那么:php會對原來的磁盤上的session文件怎么處理呢?
?
?
通過上面的試驗,答案為:
1、只是新創(chuàng)建一個session文件。而且是一個空文件。以前文件的數(shù)據(jù)并不會帶到新文件中
2、原來的session文件并不會刪除掉。保留在磁盤上。估計是垃圾回收機(jī)制的時候會自動刪除?
?
?
?
三、順便研究session_regenerate_id()對原來的session文件和數(shù)據(jù)的處理方式
?
只是將原來的文件名稱重命名為一個新的么。這樣數(shù)據(jù)還是在的。
session_regenerate_id() 在不修改當(dāng)前會話中數(shù)據(jù)的前提下使用新的 ID 替換原有會話 ID。
delete_old_session
??? 是否刪除原 ID 所關(guān)聯(lián)的會話存儲文件。
這個看介紹:拷貝一份原來的session數(shù)據(jù)文件,然后重命名為一個新的sid名稱
比如,session_sid1 新建了一個文件 session_sid2
原來的數(shù)據(jù)文件會帶到新的session文件中去的。
測驗辦法:
session_start();
session_regenerate_id();
var_dump(session_id());
?
轉(zhuǎn)載于:https://www.cnblogs.com/wangtao_20/p/4898893.html
總結(jié)
以上是生活随笔為你收集整理的session_id()和session_regenerate_id()对原来session文件和其中数据是怎么处理的的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Hi nova 11今日下午发布 新机配
- 下一篇: 《光环:无限》多人游戏负责人离职,加入索