回覆列表
  • 1 # 猿出沒

    一般都是利用cookie 中存一個sessionid

    客戶端第一次連線服務端的時候 伺服器生成一個唯一的sessionid 同時生成這個檔案來儲存session的值 然後透過HTTP頭域中返回這個sessionid 然後客戶端拿到後寫到cookie中

    後面每次HTTP互動客服端都帶上這個sessionid

    sessionid 在服務端可以存成檔案或者一個基於記憶體的hashtable

  • 2 # 網路圈

    首先來說,Session儲存於伺服器端,由於伺服器上有很多Session,如果我們要操作某個Session就需要一個標識key,在Session機制中,這個標識Key就是SessionID。

    其實這很好理解,舉個例子:你把伺服器當成一個教室,每個Session就是一個學生,如果你要找到某個學生,就需要知道這個學生的姓名。

    請注意,不同WEB容器生成的SessionID名稱是不同的,比如說PHP的SessionID標識名為PHPSESSID,Java容器生成的SessionID標識名為JSESSIONID。

    當瀏覽器第一次訪問伺服器時,伺服器端會生成一個Session(這裡伺服器端是可以控制Session是否自動生成的),然後將對應的SessionID儲存在客戶端的Cookie中,下次瀏覽器再發送請求時,就會將本地Cookie作為頭資訊傳輸到伺服器端,伺服器端獲取到SessionID後就能找到與之對應的Session了。

    那伺服器端的Session是如何儲存的呢?

    伺服器端的Session儲存形式是不同的,主要存放形式有:

    記憶體中

    伺服器File檔案中

    資料庫中

    NoSQL儲存等

    在網站架構中,如果Session存在於記憶體中,這不利於叢集環境下的Session共享互通,所以我們建議是將Session落地儲存,最好的方式就是放在NoSQL中儲存(如Redis),這樣效能最優。

  • 3 # 紫星洛華

    瀏覽器在第一次訪問網站時,會生成一個sessionid,然後寫到cookie中,發回到瀏覽器,後續請求瀏覽器會自動帶上這個包含sessionid的cookie,服務端接收這個sessionid,然後去查詢檔名為這個sessionid的檔案,檔案內容就是session的具體儲存東西了。明白了這個原理的話,那麼就可以擴充套件到資料庫,redis儲存session的方式了,他們都是以sessionid作為鍵,而且session也提供了自定義方式儲存,只要實現了他的介面就可以儲存到其他地方了。這也看出來了一個瀏覽器在同一個網站上只能登入一個賬號,因為登入過後會把賬號資訊儲存到session中,而同一個瀏覽器同一個網站只能有一個session,所以要麼銷燬之前的session,生成新的,要麼就用當前的。當然做的好的網站,在檢測到你已經登入過的情況下,是不會允許你再次進入登入頁面的,會直接給你跳轉到首頁。

  • 中秋節和大豐收的關聯?
  • 想要生活而不是活著,如何才能更快有效的解決呢 ?