session正在被淘汰嗎?

時間 2021-05-10 13:56:54

1樓:Steven湯圓

儲存在服務端的使用者狀態,都叫做session,不管你是用啥儲存,各種DB,包括redis、mysql、mssql、file還是各種實現的cache,只不過是服務端儲存方式而已,cookie是客戶端與服務端溝通的附帶資訊載體,可以通過cookie附帶session的token來獲取使用者狀態

當然,你也可以把使用者狀態資料加密放在header裡面,但是服務端仍然要儲存私鑰,對加密資料解密,這樣只是減輕服務端資料儲存壓力,但又增加了傳輸資料壓力,其本質仍然是session,只是把資料儲存做了變通,然後改了個名字叫jwt

理解session本質,就不會有這個問題。技術上取這麼多名字,就是為了區分不一樣的地方

這讓我想起了c++裡面各種概念,比如深淺拷貝,本質就是為了讓一般開發者由於對指標的理解混亂、使用錯誤而創造出來的名詞,說白了就是:你對指標了解太少,那我就多創造幾個名詞來讓你少出錯

回到本題,明明別人創造出各種名詞概念讓你少出錯,你卻鑽牛角尖,返回去誤解別人為了創造出新名詞的努力

也不能怪你,名詞多了,理解也就更混亂了,我也糾結了

2樓:

題主指的應該是傳統的Session

包括Spring Session,Shiro Session等不管是否儲存到快取,本質還是使用了Cookie這一點。

個人理解的話是

2、讓會話無狀態化,無需任何資訊儲存到服務端。

問答裡許多大佬的見解確是讓我這個初學者學到了好多東西哈哈

3樓:木易幾

都是些什麼回答。自己實現乙個session,不要依賴任何已有的session,就知道什麼是session,就知道這個問題的答案了

4樓:

狹義的session,是基於http協議,通過瀏覽器cookie和服務端session對應來鑑權和儲存使用者狀態。

說到集群,php原生支援部署session到redis,memcached,mysql等。只需要幾行簡單的配置即可。

自己實現也未嘗不可,免去了部署的麻煩。畢竟你不知道要面對什麼樣的使用者。

一些無瀏覽器的通訊,不方便儲存cookie的,通常是通過access_token來代替cookie,服務端自己實現鑑權等。實際上原理還是session那一套。

適用範圍各有不同而已。

量子糾纏開始實用之前,我還沒想到有什麼可以取代session的。

5樓:Owen Zeng

session,access_token本質上,都只是用於鑑別使用者(會話)

由於具體實現不同,導致適合的場景不同

強調會話管理的情況下,(如前面說的6月1號到期的JWT希望5月30號就讓它失效;使用者在A機改了密碼,希望已登入的B機下線等), 用session容易實現些。

強調網路響應速度又無需太注重會話管理的情況下,JWT容易實現些。

若全部都注重,用哪種方式實現,最後都會趨同,沒有太大差別

6樓:lee paul

我說應該是的。Sister影響了客戶體驗。你多多少少把cookie加密一下,啊,取代season不是問題。或者說用token進行嚴防死守。

手機上就乾脆指紋了

能拔膿的就是好膏藥。

7樓:阿法利亞

把狀態資訊儲存在redis不就是session實現方式的一種嗎?spring-session-redis不就是幹這個的嘛?

問題有點奇怪

8樓:KevinShn

session 放在 redis 中這種做法已經有很長的歷史了,無論是 tomcat 自身的實現還是借助類似 spring-session 這樣的第三方方案,都能做到無侵入,所以不能說「正在」成為主流趨勢。

9樓:

講道理,面試的問我session和accesstoken有什麼區別的時候,我就會想起post和get有什麼區別,我就會覺得這個面試的是35歲以上還沒什麼造詣的那種

10樓:Billy

這個問題其實是反映了目前很多服務都在做模組化,都在做auto-scale,都在做stateless。

session要共享,要atomicity。就目前技術來講,要實現原子性,就勢必多多少少影響stateless的實現。

session的形式背不背淘汰要看未來有沒有什麼技術能實現便宜的高併發的高一致性的資料共享吧。

11樓:by wang

你這個問題的描述就很有問題,可能並不是太了解session和cookie。

我的答案就是沒有被淘汰,根本不存在淘汰不淘汰這個問題。只能說我們是用服務端會話還是客戶端會話。

最近些年,也可能是好久以前,開始流行個jwt的東西。其實就是把會話存在前端,然後通過個金鑰進行簽名驗證合法性。在這種情況下session還是存在的,只不過不在後端存而已,可以省去些資料庫讀寫。

不過jwt也就在一些小專案裡用用,想要適應業務需求還是cookie和session那套比較靠譜。

至於你說分布式的情況下,如果是後台session肯定是有個同步機制保證在每個快取節點上有相同的資料,當然必然也是有所延遲的。

所以也就不存在所謂淘汰的問題,因為這根本是乙個新資料庫和舊資料庫互相替代的問題。

12樓:古紅平

完成一次互動,需要許可權+指令。

session是許可權工具中的一種工具,這種工具用得最廣泛。

所以選不選用,是看場景合適不合適。

從長遠看,加入瀏覽器和伺服器間的許可權出了安全問題,各大廠商優先修復的一定是用的最廣泛的。

13樓:花滿樓

session不會被淘汰,但也不影響像jwt這樣的基於token的無狀態認證庫的流行。一方面,對於cookie不支援或支援起來比較麻煩的客戶端,比如小程式、有些桌面程式,jwt就非常合適;另一方面,對於分布式系統,session需要做持久化儲存,而jwt可以自行存在客戶端,靈活性高。

14樓:卡拉迦迪斯

題主沒明白session是什麼……

所有才會有【寧願把狀態資訊儲存到redis一類的第三方應用中,也不想使用session】

這種感覺……

現在用session更少的原因,我覺得主要還是希望更有掌控力在cookie裡存乙個sessionId,然後把資訊存在伺服器端,每次拿著sessionId作為標識

在cookie裡存乙個token,然後把資訊存在伺服器端,每次拿著token作為標識

對於儲存的資料來說,是沒有什麼區別的。

區別只是在於,程式設計師們對token的生成、校驗、銷毀更有掌控力,對資料、訪問的整個生命週期更有掌控力。

正因為如此,所以現在都更多的使用非session的方式。

15樓:「已登出」

redis不也是session storage。

這東西幾乎是必須有的,除非你有辦法把state完全限制在dbms之內,但這樣你的dbms會很傷心的。

至於jwt……emm……這個東西是「由伺服器簽發儲存到客戶端的資訊」,我是只把這個東西當作token用。就算是摘要簽名+加密+時間戳,但是這畢竟是client side的東西。

至於jwt的問題,首先假設是https + httpOnly:true + sameSite:strict,所以有些問題不需要考慮得太早,假設這麼乙個場合,使用者在登入之後看cookie拿到了你的jwt,然後根據jwt計算你的簽名金鑰。

那麼你應該在多長時間後不再接受由這個簽名金鑰簽發的token?

這意味著你必須要一直更換簽名金鑰。但如果你要給予某方長期授權,那麼對方就必須不停地更新token,因為舊token會很快過期。

那麼你為了解決這個問題,把jwt用另乙個金鑰加密然後再發給使用者。這下使用者只能看到加密後的token。但是使用者很聰明,他知道你這個是加密後的jwt,所以繼續爆破你的加密。

這次你的存活時間能長一些,但是這個金鑰你還是要定期更換。而且這樣jwt就喪失了使用者雙方交流的能力,使用者看不到你的payload(雖然大多數情況下你也不想讓使用者看,這就無所謂了)。

另外還有乙個問題是,使用者自己進行的重放攻擊,就是說你的payload裡面可能有一些不該有的東西,使用者用「之前簽發的token中的payload」來攻擊,比如使用者的餘額。。。就是說,就算是你加密了token,payload裡面不該有的東西還是不能用。

至於token洩露。。。無論哪種鑑權方式token洩露都一樣危險,通過https + httpOnly:true + sameSite:

strict我們已經可以把這個風險降到很低了,這個問題也不是鑑權應該負責的。

16樓:點燃你的腿毛

正如一些答主所說,session只是形式變了,本質沒變。用的是cookie也好,access_token也好,目的是讓服務端識別出是誰而進行會話。

Spring boot 2.*,netty+webflux,可以實現同時支援cookie或頭資訊設定token或者URL上帶token引數,三者用的是同乙個標識值,也是用Spring session把這個標識存在redis中。

17樓:段Dr

我反對本問題下所有認為「session與jwt並無不同」的答主。session和jwt都是為了儲存業務狀態而生的,但兩者的哲學完全不同:

session簡單粗暴,在服務端維護會話資訊,在客戶端儲存session id,服務端能夠輕易地把會話控制在自己的手中,但服務集群化產生了session共享的負擔;

jwt只在客戶端儲存會話資訊,服務端通過金鑰校驗會話,(相比session)拿時間換空間,卸下了服務端集群共享會話資訊的負擔,同時也加大了服務端控制會話的難度。

可以說jwt是為了解決session的缺點而生的,但jwt並不是完美的。session即使用得越來越少,也絕不會退出歷史舞台。

18樓:繁星若塵

只要是存在伺服器,無非就是session變個花樣,存在redis裡,就不是session了?

之前見過乙個說是開發了一套代替session的,就是重複造了了輪子,改了個名字。

19樓:RickyWong

http.是無狀態的,業務是有狀態的,cookie也好,session也好,都是為了實現這個需求而創造的工具,無論技術怎麼演進,萬變不離其宗,還是會有個地方儲存業務的狀態,區別只是方式和實現的不同,本質並沒有變。

20樓:

我覺得應該看怎麼理解這個session。如果當成是一種資料互動與驗證的持久化操作來看,只是現在有很多不同的實現。_(:з」∠)_

我們是否正在被監視?

信則有,不信則無。監視 是有目的性的行為,監視某物件做了某些事,若監視物件為 我們 或是說 人類 那麼從整體上來說,監視的目的也許為 人類的各方面發展 或是 乙個族群的生存到滅亡 或者說監視物件為 個體 人群中的某個人的 一生 或是生命中的 選擇 既然是監視,那麼定是想讓監視物件按某種既定的路,即監...

抑鬱症正在被社會理解是嗎?

樓瀾攬月 別說抑鬱症了,就連普通的感冒 每個人都會發生的疾病,你問問有幾個人健康人能對正患感冒的人感同身受?其實我也看透這一點,人類的同情心並沒有那麼偉大,所以我一直持有乙個保守的觀點,就是多數人不必安慰抑鬱症患者,也不必假裝或者真的很努力去理解抑鬱症病理或者抑鬱患者的內心,只要不傷害,堅守好平等對...

你的大便正在被人窺視

神靈武士 按我的理解,人際關係大體上分為四種。1.你身邊最核心的一兩個人,他就是你你就是他,他能為你獻出生命,你也一樣。這種人,我們叫他兄弟。兄弟能夠在關鍵時候幫上你,但你卻要用一生去尋找他們。不要奢求有太多兄弟,尤其是在現在這個社會裡,這是很困難的。兄弟可遇而不可求,只有脾氣秉性,理想追求,價值觀...