国产丰满乱子伦无码,人妻体内射精一区二区,国产色视频一区二区三区QQ号,亚洲人成在线观看

數據恢復咨詢熱線:400-666-3702??

歡迎訪問南京兆柏數據恢復公司,專業數據恢復15年

兆柏數據恢復公司

?數據恢復教程

?當前位置: 主頁 > 數據恢復教程

PHP是 如何實現 多服務器SESSION 共享 的

瀏覽量: 次 發布日期:2023-09-14 19:59:25

PHP是 如何實現 多服務器SESSION 共享 的

  商務合作加微信:2230304070

  學習與交流:PHP技術交流微信群

  2023年 JetBrains全家桶通用 未使用的賬號 正版授權 一人一號

  https://web.52shizhan.cn/activity/xqt8ly

  在多服務器環境下,使用 SESSION 共享的主要目的是確保用戶在不同服務器之間的會話狀態的一致性。以下是一些常見的情況和原因:

  1 負載均衡:當使用負載均衡器將請求分發給多個服務器時,每個請求可能被路由到不同的服務器上。

  如果不進行 SESSION 共享,用戶在一個服務器上登錄后,再次請求時可能被路由到另一個服務器,導致登錄狀態丟失,用戶需要重新登錄。通過 SESSION 共享,可以確保用戶的會話狀態在多個服務器之間共享,使用戶無論被路由到哪個服務器,都能保持登錄狀態。

  2 水平擴展:在需要擴展應用程序的情況下,可能需要添加更多的服務器來處理更大的負載。如果每個服務器都有自己的 SESSION 存儲,那么用戶在不同服務器之間切換時會話狀態將丟失。

  通過 SESSION 共享,可以將用戶的會話狀態存儲在共享存儲中,使多個服務器都可以訪問和更新這些會話數據。

  3 共享數據:有時,應用程序需要在不同的服務器之間共享一些重要的數據,例如購物車內容、用戶首選項等。

  通過 SESSION 共享,可以將這些共享數據存儲在共享存儲中,以便所有服務器都可以訪問和更新這些數據,確保數據的一致性和實時性。

  需要注意的是,SESSION 共享需要謹慎處理,確保數據的安全性和一致性。共享存儲后端的性能和可靠性也是需要考慮的因素。

  PHP的session原理

  PHP 的 Session 是一種在 Web 應用中跟蹤用戶狀態的機制。它基于服務器端存儲和客戶端 Cookie,并通過唯一的 Session ID 進行關聯。

  以下是 PHP Session 的基本工作原理:

  1 客戶端發送請求:當客戶端(通常是瀏覽器)發送請求到服務器時,服務器會為該客戶端創建一個唯一的 Session ID,并將該 Session ID 存儲在客戶端的 Cookie 中(通常名為 PHPSESSID)。

  2 服務器創建 Session 文件:服務器收到請求后,會根據 Session ID 創建一個對應的 Session 文件。這個文件默認存儲在服務器上指定的臨時目錄中,可以通過 session.save_path 配置項進行設置。

  3 Session 數據存儲:服務器將需要存儲的數據(如用戶的登錄狀態、購物車內容等)保存到 Session 文件中。這些數據可以通過超全局變量 $_SESSION 來訪問和操作。

  4 Session ID 關聯:服務器會將該 Session ID 關聯到當前用戶的請求,以便后續請求可以通過該 Session ID 進行識別和檢索相應的 Session 數據。

  5 數據傳遞和更新:在后續的請求中,客戶端會在請求中的 Cookie 中攜帶 Session ID,服務器通過該 Session ID 查找對應的 Session 文件,并獲取存儲的 Session 數據。這樣,服務器可以讀取和更新 Session 數據,以保持用戶狀態的一致性。

  6 Session 銷毀:Session 可以有一個過期時間,一旦超過過期時間,服務器會將對應的 Session 文件刪除,并在客戶端的 Cookie 中刪除相應的 Session ID。

  需要注意的是,默認情況下,PHP 的 Session 使用文件來存儲數據。但也可以使用其他存儲介質,如數據庫、緩存服務器(如 Redis、Memcached)等,通過配置 session.save_handler 和 session.save_path 進行指定。

  通過 Session,PHP 提供了一種跨頁面和跨請求的狀態管理機制,使得開發者可以方便地在 Web 應用中存儲和獲取用戶的狀態信息。

  所以我們要解決session共享,就必須解決兩個問題:

  1. 多臺服務器用同一個session_id

  這個比較容易解決,只要在php中設置存的域名

  為網站主域就可以了

  打開, 設置

  當然也可以在php代碼當中

  2. 多臺服務器用同一個session_id訪問到相同的session內容

  3. 如何選擇存儲引擎

  默認文件存儲:這種方式的session銷毀依托于php垃圾收集器,在高并發或銷毀時間較長的情況下,在SESSION目錄下產生大量文件,當然可以設置分級目錄進行 SESSION 文件的保存。

  這會導致兩個問題:第一、查找文件慢;第二,每個目錄下可容納的文件數是有限的,可能會導致新SESSION儲存失敗。

  1) 設置Session存儲的引擎,php.ini 文件

  2)默認情況下的Session的使用

  3)在服務器中存儲的形式是這樣的

  數據庫存儲:把Session存儲在數據庫里可以防止Session數據被垃圾收集器刪除,可以固化存儲session數據。但是用數據庫來同步session,會加大數據庫的IO,增加數據庫的負擔。而且數據庫讀寫速度較慢,不利于session的適時同步。

  memcache存儲:

  以這種方式來同步session,不會加大數據庫的負擔,并且安全性比較高,把session放到內存里面,比從文件中讀取要快很多。

  但是memcache把內存分成很多種規格的存儲塊,有塊就有大小,這種方式也就決定了,memcache不能完全利用內存,會產生內存碎片,如果存儲塊不足,還會產生內存溢出

  那些不需要“分布”的,不需要共享的,或者干脆規模小到只有一臺服務器的應用,memcached不會帶來任何好處,相反還會拖慢系統效率,因為網絡連接同樣需要資源。

  Redis存儲:

  與memcache相比,redis訪問稍稍慢一點點,好處是:redis支持的數據結構較多,可以存儲數組或對象,而memcache只能存儲字符串。

  在session機器重啟的情況下,memcache所有用戶都必須重新獲得 session,而redis不會在突然涌來大量用戶產生了很多數據把存儲 session 的機器內存占滿了的情況下,memcache 會罷工,所有 key 都沒過期的話就不停的覆蓋最后寫入的數據,而 redis 只是會變慢 ,不會影響程序的邏輯。

  1)設置php.ini 文件中的session.save_handle 和session.save_path

  注1:如果連接的是遠程redis,需要將localhost換成對應的遠程ip地址。像這樣

  注2:如果為redis已經添加了auth權限(requirpass),session.save_path項則應該這樣寫

  2)使用redis存儲session信息

  在redis上是以這樣的形式進行存儲的

  封裝session類 b.php

  session類的使用:d.php

  redis中顯示:

  參考鏈接: 以上就是本篇分鐘的全部內容,希望各位程序員們努力提升個人技術。最后,小編溫馨提示:每天閱讀5分鐘,每天學習一點點,每天進步一點點。

相關推薦