亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

請教一下,$_SESSION變量是一個用戶一份還是整個服務器一份?

如果是一個服務器保存一份 $_SESSION 變量的話,按本章課程代碼所示,當A用戶訪問時,$_SESSION['uid']和$_SESSION['name']都被記錄成A用戶的了,在A用戶退出系統前,B用戶也來訪問了,這時這倆參數豈不是又被改寫成 B 用戶的數據了,如果A用戶接著退出了,又要去清理$_SESSION變量,又把B用戶的登錄信息給清掉了嗎?

感覺PHP的并發處理超級混亂,有沒有教程專門講這一塊的內容呢?

正在回答

4 回答

? ? ?php在web服務器上運行時使用php-FPM作為和web服務器交流的中間件,在php-FPM中會為每一個請求分配一個work進程,而每個worker進程里都存在一個php解析器,這樣就能保證不同訪問之間的數據能夠進行隔離而不會出現數據混亂的情況。這個是多進程并發php處理的情況。

? ? ? 而且,session的運行機制是-告訴瀏覽器我會對請求訪問的用戶進行標識跟蹤,這樣瀏覽器在發送請求的時候就會自動的將所有的cookie值在每次的請求中作為參數發送過去(其實無論服務器上是否開啟了session功能都會將該網站的cookie值(未過期的)作為請求的參數發送給服務器)。

? ? ? ? ?自然在這里面的cookie中, 如果在這次訪問中已經開始了session自然也會包括 seesion_id 這個cookie,如果之前服務器沒有為這個訪問的用戶分配相應的session_id 那么在該次請求之后就會分配相應的 seesion_id 告知瀏覽器(即客戶端, 且服務器端設置開啟了 session_start),有了session_id 服務器就能夠區別不同的訪問的用戶,從而使用獨自的session文件(默認使用文件存儲session)。

0 回復 有任何疑惑可以回復我~

session是根據客戶端來判斷的,不同的客戶端會有不同的sessionid,是不同的session對象

0 回復 有任何疑惑可以回復我~

session是服務器為不同的客戶端(用戶)創建的保存數據的session對象,樓主所說的A用戶訪問B用戶的數據不會出現,原因是一個Session定義的全局變量的作用范圍,是指這個Session所對應的用戶所訪問的所有PHP,并不包含其他用戶訪問的內容。

另外,session_id是一次請求服務器為其創建一個,但是,請求過后下一次再請求時,服務器會首先檢索是否已經存在請求的session_id,有則啟用,沒有則創建,所以也不能說是一次請求生成一個,不準確。

還有一點就是,一個用戶使用不同的瀏覽器訪問服務器會創建不同的session_id(記不清了,有待驗證...)。

3 回復 有任何疑惑可以回復我~

準確的來說是一個session_id一個,也可說是每個用戶一個

0 回復 有任何疑惑可以回復我~
#1

金澤城 提問者

是么,session_id是服務器自動生成的吧,可是服務器是怎么區分不同的用戶的呢?一次請求一個?還是一個IP一個?邏輯還是理不通啊。
2017-03-10 回復 有任何疑惑可以回復我~
#2

那些年29 回復 金澤城 提問者

大哥那是數據庫讀取 賦值的,不是服務器自動生成,要是自動生成那就亂套了,每次登入,每次換id 你覺得可能嗎
2017-05-24 回復 有任何疑惑可以回復我~
#3

慕圣3571134 回復 金澤城 提問者

也可以指定分配id,session_id("指定的id值")。取回的時候可以使用 0 + session_id()轉換為int數據類型
2018-12-22 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

請教一下,$_SESSION變量是一個用戶一份還是整個服務器一份?

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號