SESSION在服務端(PHP/JAVA)具體是如何?的?

來源:互聯網
上載者:User
通常我們說session可以依託cookie實現,這主要是站在用戶端的角度。我想知道在服務端的儲存情況。session是儲存在記憶體中,那麼在Java/PHP的後台中,一次網頁請求(JSP/PHP)其中的網頁中的對象/變數的生命週期是怎麼樣的,SESSION相關對象/變數是如何長時間貯存於記憶體中,而不銷毀的?
PS:web小白

回複內容:

用戶端初次請求時,如果會使用到session,此時服務端通過回應標頭中的Set-Cookie這樣一個header項,把sessionId寫回到瀏覽器的cookie中,這種Cookie也叫SessionCookie,在整個瀏覽器關閉之後就被清除了。而再次請求時,瀏覽器發送的要求標頭中會包含cookie這樣一項header:即剛才寫回來的sessionId,再次到達伺服器時,根據這個sessionId,配置之前為請求建立的session,從而所有以這個sessionId儲存的資訊都存了下來。
服務端這個session預設逾時時間是30分鐘,就是30分鐘沒有使用就被清除掉了。而如果一直在使用,則每次active時間會被更新,到了30分也不會被清除。
而至於session存在哪裡,只是一種具體的實現形式,比如為了實現session的高可用,可能會把session存到Memcache或者Redis中,甚至存在資料中也是可以的,存取一致即可。session就分為儲存和傳遞兩部分。一般情況下儲存是以檔案形式存在緩衝目錄(tmp)中的,可以修改成多種形式,比如memcache儲存。傳遞方面一般都是通過會話生命週期的cookie來傳遞,當會話結束後cookie就沒了,所以就以為session也沒了,實際上服務端的session還存在。當然傳遞還可以改成其他方式,比如做app介面無法使用cookie傳遞,那麼就使用get或post方式來傳遞session_id,總之瞭解清楚session原理後,做介面很方便了。瀉藥

session cookie 就是 cookie 的一種,cookie 就是存在瀏覽器裡的,服務端不一定需要有對應的儲存。

而服務端有儲存的 session,一般是指 session id,用戶端可以是通過 cookie 維持,也可以通過其他方式維持,服務端根據 session id 映射到使用者會話資料,這些資料儲存在服務端,傳輸時只傳 session id。

服務端具體怎麼存,這就很多種了,有基於檔案的,有放在應用記憶體裡的,有存到關係型資料庫的,也有存到 NoSQL 的。

答得比較抽象,但正如很多技術問題一樣,一個術語要描述清楚需要用到別的術語才能嚴謹。詳細答案可以參考以下連結。

https://en.m.wikipedia.org/wiki/HTTP_cookie

https://en.m.wikipedia.org/wiki/Session_ID java中的實現,根據servlet規範,cookie中放一個JSESSIONID
tomcat有一個SessionManager,差不多就是Session session = map.get("JSESSIONID");
然後session有到期機制。
具體看tomcat代碼去。瀏覽器的php程式目錄下有檔案儲存session資訊,檔案流也是php預設儲存session的方式。而目前類似於百度這樣的高並髮網站一般都用memcache甚至其他更高科技的手段儲存session資料。
伺服器端的session用session_id這種類似於資料庫外鍵的東西和用戶端cookie裡面的PHPSESSION欄位做聯絡。session 在服務端和瀏覽器都有儲存的內容

類似於銀行取錢
瀏覽器存的叫做session_id 類似於銀行卡號
伺服器存的就是你的會話資訊

當瀏覽器訪問伺服器時,會把這個數字帶給瀏覽器。伺服器會根據這個數字提取相應的資訊,所以說session_id很重要,可能會被不法分子利用
所以有的時候你去支付某些東西的時候,還需在進一步驗證。

如果你關閉瀏覽器,服務端,這些資訊也不會丟,只是你下一次開啟瀏覽器,產生session_id和上一次不一樣了。

難道這些資訊會永久儲存嗎?
不,這些資訊會到期,到期服務端就將這些資訊丟棄,所以一段時間後,即使,你一直沒關閉瀏覽器,也要重新登入。就像銀行資料庫資訊丟失,你有卡也沒用。

根據服務端的配置不同,這些資訊丟失的時間也不同。

上述是java tomcat伺服器的邏輯實現方式
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.