日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時(shí)間:2023/12/31 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 session_id()和session_regenerate_id()对原来session文件和其中数据是怎么处理的 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

?

?



一、session_id()對(duì)原來(lái)session文件和里面的數(shù)據(jù),是怎么處理的?

?



測(cè)驗(yàn)辦法:
<?php

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


?>

?



是新創(chuàng)建一個(gè)session文件。

那么原來(lái)PHPSESSID對(duì)應(yīng)的服務(wù)器上的數(shù)據(jù)就不會(huì)用到了,因?yàn)樾聞?chuàng)建了一個(gè)文件。

?

?

二、研究上面這個(gè)有什么用途?

?

業(yè)務(wù)中需要

?

?

問(wèn)題的背景:
?* um.mama.cn/passport 和passport.mama.cn都是訪問(wèn)新版本passport系統(tǒng)。
?*
?* 當(dāng)app跳轉(zhuǎn)到網(wǎng)頁(yè)時(shí),app先在打開(kāi)的webview中,請(qǐng)求passport的一個(gè)接口。
?* app>>>>>http://passport.mama.cn/appapi/setWebViewSession?app_code=xxx
?* passport驗(yàn)證成功后,會(huì)設(shè)置webview為登錄狀態(tài)(即把登錄狀態(tài)存儲(chǔ)到memcache)
?*
?* 但,網(wǎng)頁(yè)訪問(wèn)的域名卻是um.mama.cn/passport,兩個(gè)域名不同,PHPSESSID就不同。之前設(shè)置的登錄狀態(tài)無(wú)法同步到um.mama.cn域名
?*
?* 目前思路是:登錄狀態(tài)是放在共享位置-memcache中,登錄狀態(tài)要想共享,讓兩個(gè)域名的PHPSESSID保持一樣即可。同樣的sid,可以去memcache查詢數(shù)據(jù)。
?*
?* 具體做法是:
?* app請(qǐng)求接口時(shí),設(shè)置登錄狀態(tài)后,順便將passport.mama.cn的sid備份到一個(gè)讓passport.mama.cn也能讀取的公共域名下:mama.cn
?* 進(jìn)入um.mama.cn時(shí)候,從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();
??? //這個(gè)cookie用完畢后刪除掉,避免影響
??? setcookie('app_passport_login_sid', $sid, time()-86400, '/','.mama.cn');
}

?

?>

?

?

我想知道session_id()重置為指定的sid,有以下疑惑,解決這些疑惑以便評(píng)估對(duì)業(yè)務(wù)的影響:

重置為一個(gè)sid,是新創(chuàng)建一個(gè)session文件?還是把原來(lái)的session文件重命名即可呢?

如果是新創(chuàng)建一個(gè)新的session文件,那么:php會(huì)對(duì)原來(lái)的磁盤上的session文件怎么處理呢?

?

?

通過(guò)上面的試驗(yàn),答案為:

1、只是新創(chuàng)建一個(gè)session文件。而且是一個(gè)空文件。以前文件的數(shù)據(jù)并不會(huì)帶到新文件中

2、原來(lái)的session文件并不會(huì)刪除掉。保留在磁盤上。估計(jì)是垃圾回收機(jī)制的時(shí)候會(huì)自動(dòng)刪除?

?

?

?

三、順便研究session_regenerate_id()對(duì)原來(lái)的session文件和數(shù)據(jù)的處理方式

?

只是將原來(lái)的文件名稱重命名為一個(gè)新的么。這樣數(shù)據(jù)還是在的。


session_regenerate_id() 在不修改當(dāng)前會(huì)話中數(shù)據(jù)的前提下使用新的 ID 替換原有會(huì)話 ID。


delete_old_session

??? 是否刪除原 ID 所關(guān)聯(lián)的會(huì)話存儲(chǔ)文件。


這個(gè)看介紹:拷貝一份原來(lái)的session數(shù)據(jù)文件,然后重命名為一個(gè)新的sid名稱

比如,session_sid1 新建了一個(gè)文件 session_sid2

原來(lái)的數(shù)據(jù)文件會(huì)帶到新的session文件中去的。



測(cè)驗(yàn)辦法:

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文件和其中数据是怎么处理的的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。