使用者登入後更換會話ID

2021-08-02 20:47:59 字數 1583 閱讀 1946

漏洞:會話標識未更新。提供的解決辦法是,在使用者登入時始終使用新的會話。

我仔細檢視了我的

系統。原來在使用者進入登入頁面,但還未登入時,就已經產生了乙個session,使用者輸入資訊,登入以後,session的id不會改變,也就是說還是以前的那個session(事實上session也確實不會改變,因為沒有建立新session,原來的session也沒有被銷毀)。

後來我做了如下改變。在我的登入servlet裡面將使用者剛進入登入頁面的那個session用invalidate()銷毀掉,在使用者資訊匹配成功後,再建立乙個新session,將使用者資訊放到session中去。

本來以為這種做法應該可以解決問題了,但是再掃瞄發現問題還存在。再一檢視,發現新建立的session與原來被銷毀的session的id居然還是一樣的。真是搞不懂了!

系統背景:j2ee,jboss

以下是我的登入servlet的**:

/***接下來是對使用者進行認證的*****/

······

/***使用者認證**結束***/

後來我找了好久才發現,之所以將會話invalidate沒有用,是因為invalidate方法不是真正的將session銷毀,只是將session中的內容清空,所以當我invalidate以後再新建session,新建的session其實不是新的,是將之前的session重新啟用了。於是session的id不變就不奇怪了。

要怎麼才能真正的將session銷毀掉呢?看看下面的辦法:

request.getsession().invalidate();//清空session

cookie cookie = request.getcookies()[0];//獲取cookie

cookie.setmaxage(0);//讓cookie過期

然後使用者再輸入資訊登入時,就會產生乙個新的session了。

雖然我的系統裡面沒有使用cookie,但是只要是web系統就離不開cookie。系統裡面沒有使用cookie是我沒有用cookie來儲存資料、標示使用者等等。但是伺服器跟蹤會話狀態就是用的cookie。既然cookie是伺服器用來跟蹤會話狀態的,那麼如果cookie過期了,會怎麼樣?--不用解釋了吧。回答了這個問題,怎麼讓會話真正被銷毀也就不難回答了。

我在登陸頁面上加的那段**的作用就是,將使用者進入登陸頁面時所產生的會話也就是session清空,然後讓跟蹤這個會話的cookie過期,這樣伺服器就不再掌握有關這個會話的任何資訊了。要想與伺服器繼續通訊,就要產生乙個新的會話才行。於是會話標示就更新了!

問題就是這麼解決的。

總結起來,其實軟體開發中的所有問題都不難,關鍵是找到問題的根源。know why, so you can know how

使用者登入後更換會話ID

漏洞 會話標識未更新。提供的解決辦法是,在使用者登入時始終使用新的會話。我仔細檢視了我的 系統。原來在使用者進入登入頁面,但還未登入時,就已經產生了乙個session,使用者輸入資訊,登入以後,session的id不會改變,也就是說還是以前的那個session 事實上session也確實不會改變,因...

登入後顯示使用者資訊

web層 功能描述 根據token獲取登入資訊 param request http請求 return r 返回給前端的資料 author cakin date 2020 12 27 apioperation value 根據token獲取登入資訊 獲取使用者登入資訊 getlogininfo ht...

使用者登入後自動執行的檔案

etc profile 此檔案為系統的每個使用者設定環境資訊,當使用者第一次登入時,該檔案被執行.並從 etc profile.d目錄的配置檔案中蒐集shell的設定.etc bashrc 為每乙個執行bash shell的使用者執行此檔案.當bash shell被開啟時,該檔案被讀取.bash p...