請教一下,$_SESSION變量是一個用戶一份還是整個服務(wù)器一份?
如果是一個服務(wù)器保存一份 $_SESSION 變量的話,按本章課程代碼所示,當(dāng)A用戶訪問時,$_SESSION['uid']和$_SESSION['name']都被記錄成A用戶的了,在A用戶退出系統(tǒng)前,B用戶也來訪問了,這時這倆參數(shù)豈不是又被改寫成 B 用戶的數(shù)據(jù)了,如果A用戶接著退出了,又要去清理$_SESSION變量,又把B用戶的登錄信息給清掉了嗎?
感覺PHP的并發(fā)處理超級混亂,有沒有教程專門講這一塊的內(nèi)容呢?
2019-12-01
? ? ?php在web服務(wù)器上運行時使用php-FPM作為和web服務(wù)器交流的中間件,在php-FPM中會為每一個請求分配一個work進程,而每個worker進程里都存在一個php解析器,這樣就能保證不同訪問之間的數(shù)據(jù)能夠進行隔離而不會出現(xiàn)數(shù)據(jù)混亂的情況。這個是多進程并發(fā)php處理的情況。
? ? ? 而且,session的運行機制是-告訴瀏覽器我會對請求訪問的用戶進行標(biāo)識跟蹤,這樣瀏覽器在發(fā)送請求的時候就會自動的將所有的cookie值在每次的請求中作為參數(shù)發(fā)送過去(其實無論服務(wù)器上是否開啟了session功能都會將該網(wǎng)站的cookie值(未過期的)作為請求的參數(shù)發(fā)送給服務(wù)器)。
? ? ? ? ?自然在這里面的cookie中, 如果在這次訪問中已經(jīng)開始了session自然也會包括 seesion_id 這個cookie,如果之前服務(wù)器沒有為這個訪問的用戶分配相應(yīng)的session_id 那么在該次請求之后就會分配相應(yīng)的 seesion_id 告知瀏覽器(即客戶端, 且服務(wù)器端設(shè)置開啟了 session_start),有了session_id 服務(wù)器就能夠區(qū)別不同的訪問的用戶,從而使用獨自的session文件(默認使用文件存儲session)。
2019-09-04
session是根據(jù)客戶端來判斷的,不同的客戶端會有不同的sessionid,是不同的session對象
2017-04-29
session是服務(wù)器為不同的客戶端(用戶)創(chuàng)建的保存數(shù)據(jù)的session對象,樓主所說的A用戶訪問B用戶的數(shù)據(jù)不會出現(xiàn),原因是一個Session定義的全局變量的作用范圍,是指這個Session所對應(yīng)的用戶所訪問的所有PHP,并不包含其他用戶訪問的內(nèi)容。
另外,session_id是一次請求服務(wù)器為其創(chuàng)建一個,但是,請求過后下一次再請求時,服務(wù)器會首先檢索是否已經(jīng)存在請求的session_id,有則啟用,沒有則創(chuàng)建,所以也不能說是一次請求生成一個,不準(zhǔn)確。
還有一點就是,一個用戶使用不同的瀏覽器訪問服務(wù)器會創(chuàng)建不同的session_id(記不清了,有待驗證...)。
2017-03-10
準(zhǔn)確的來說是一個session_id一個,也可說是每個用戶一個