實現Web程式的自動登入
本文為原創,如需轉載,請註明作者和出處,謝謝!
有很多Web程式中第一次登入後,在一定時間內(如2個小時)再次訪問同一個Web程式時就無需再次登入,而是直接進入程式的主介面(僅限於本機)。實現這個功能關鍵就是服務端要識別客戶的身份。而用Cookie是最簡單的身從驗證。
如果使用者第一次登入,可以將使用者名稱作為Cookie寫到本地,程式碼如下:
Cookie cookie = new Cookie("user", user);
cookie.setMaxAge(365 * 24 * 3600);
cookie.setPath("/");
response.addCookie(cookie);
當使用者再次訪問程式時,服務端程式應該檢測這個Cookie是否存在,程式碼如下:
Cookie[] cookies=request.getCookies();
for(Cookie cookie: cookies)
{
if(cookie.getName().equals(user))
{
// 如果user Cookie存在,進行處理
break;
}
}
儘管從客戶端可以獲得User Cookie,但這上Cookie可能存在很長時間,而且僅憑這個Cookie就自動登入並不安全,因此,可以在服務端使用一個Session來管理使用者。也就是當第一次登入成功後,就建立一個Session,並將使用者的某些資訊儲存在Session順。程式碼如下:
HttpSession session =request.getSession();
session.setAttribute(user, user);
session.setMaxInactiveInterval(2 * 3600); // Session儲存兩小時
當再次訪問程式時,確定了cookie存在後,就會繼續驗證User Session的存在,程式碼如下:
Cookie[] cookies=request.getCookies();
for(Cookie cookie: cookies)
{
if(cookie.getName().equals(user))
{
if(session.getAttribute(user) != null)
{
// 直接forward到主介面
break;
}
else
{
// forward到登入介面
}
}
}
雖然上面的程式碼可以很好地實現自動登入功能,但是當瀏覽器關閉,再次啟動後,由於Servlet用於儲存Session ID的JSESSIONID Cookie是臨時的(也就是說不是持久Cookie,當瀏覽器關閉後,這個Cookie就會被刪除),因此,需要將JSESSIONID進行持久化。程式碼如下:
HttpSession session = request.getSession();
session.setAttribute(user, user);
session.setMaxInactiveInterval(2 * 3600); // Session儲存兩小時
Cookie cookie = new Cookie("JSESSIONID", session.getId());
cookie.setMaxAge(2 * 3600); // 客戶端的JSESSIONID也儲存兩小時
session.setMaxInactiveInterval(interval)
cookie.setPath("/");
response.addCookie(cookie);
如果使用上面的程式碼,即使瀏覽器關閉,在兩小時之內,Web程式仍然可以自動登入。
如果我們自已加一個JSESSIONID Cookie,在第一次訪問Web程式時,HTTP響應頭有兩個JSESSIONID,但由於這兩個JSESSIONID的值完全一樣,因此,並沒有任何影響。如果在響應頭的Set-Cookie欄位中有多個相同的Cookie,則按著path和name進行比較,如果這兩個值相同,則認為是同一個Cookie,最後一個出現的Cookie將覆蓋前面相同的Cookie,如下面的兩個Cookie,最後一個將覆蓋前一個:
Set-Cookie: JSESSIONID=DDB2274CAC6739E1D6747B0043D5D90E; Path=/web
Set-Cookie: JSESSIONID=mysession; Expires=Thu, 05-Jun-2008 05:02:50 GMT; Path=/web
由於下面兩個Cookie的path不同,因此,它們是完全不同的兩個Cookie:
Set-Cookie: JSESSIONID=DDB2274CAC6739E1D6747B0043D5D90E; Path=/web1
Set-Cookie: JSESSIONID=mysession; Expires=Thu, 05-Jun-2008 05:02:50 GMT; Path=/web2
誰有其他的方法(可以是任何語言或技術)實現自動登入,請跟貼!
有很多Web程式中第一次登入後,在一定時間內(如2個小時)再次訪問同一個Web程式時就無需再次登入,而是直接進入程式的主介面(僅限於本機)。實現這個功能關鍵就是服務端要識別客戶的身份。而用Cookie是最簡單的身從驗證。
如果使用者第一次登入,可以將使用者名稱作為Cookie寫到本地,程式碼如下:
Cookie cookie = new Cookie("user", user);
cookie.setMaxAge(365 * 24 * 3600);
cookie.setPath("/");
response.addCookie(cookie);
當使用者再次訪問程式時,服務端程式應該檢測這個Cookie是否存在,程式碼如下:
Cookie[] cookies=request.getCookies();
for(Cookie cookie: cookies)
{
if(cookie.getName().equals(user))
{
// 如果user Cookie存在,進行處理
break;
}
}
儘管從客戶端可以獲得User Cookie,但這上Cookie可能存在很長時間,而且僅憑這個Cookie就自動登入並不安全,因此,可以在服務端使用一個Session來管理使用者。也就是當第一次登入成功後,就建立一個Session,並將使用者的某些資訊儲存在Session順。程式碼如下:
HttpSession session =request.getSession();
session.setAttribute(user, user);
session.setMaxInactiveInterval(2 * 3600); // Session儲存兩小時
當再次訪問程式時,確定了cookie存在後,就會繼續驗證User Session的存在,程式碼如下:
Cookie[] cookies=request.getCookies();
for(Cookie cookie: cookies)
{
if(cookie.getName().equals(user))
{
if(session.getAttribute(user) != null)
{
// 直接forward到主介面
break;
}
else
{
// forward到登入介面
}
}
}
雖然上面的程式碼可以很好地實現自動登入功能,但是當瀏覽器關閉,再次啟動後,由於Servlet用於儲存Session ID的JSESSIONID Cookie是臨時的(也就是說不是持久Cookie,當瀏覽器關閉後,這個Cookie就會被刪除),因此,需要將JSESSIONID進行持久化。程式碼如下:
HttpSession session = request.getSession();
session.setAttribute(user, user);
session.setMaxInactiveInterval(2 * 3600); // Session儲存兩小時
Cookie cookie = new Cookie("JSESSIONID", session.getId());
cookie.setMaxAge(2 * 3600); // 客戶端的JSESSIONID也儲存兩小時
session.setMaxInactiveInterval(interval)
cookie.setPath("/");
response.addCookie(cookie);
如果使用上面的程式碼,即使瀏覽器關閉,在兩小時之內,Web程式仍然可以自動登入。
如果我們自已加一個JSESSIONID Cookie,在第一次訪問Web程式時,HTTP響應頭有兩個JSESSIONID,但由於這兩個JSESSIONID的值完全一樣,因此,並沒有任何影響。如果在響應頭的Set-Cookie欄位中有多個相同的Cookie,則按著path和name進行比較,如果這兩個值相同,則認為是同一個Cookie,最後一個出現的Cookie將覆蓋前面相同的Cookie,如下面的兩個Cookie,最後一個將覆蓋前一個:
Set-Cookie: JSESSIONID=DDB2274CAC6739E1D6747B0043D5D90E; Path=/web
Set-Cookie: JSESSIONID=mysession; Expires=Thu, 05-Jun-2008 05:02:50 GMT; Path=/web
由於下面兩個Cookie的path不同,因此,它們是完全不同的兩個Cookie:
Set-Cookie: JSESSIONID=DDB2274CAC6739E1D6747B0043D5D90E; Path=/web1
Set-Cookie: JSESSIONID=mysession; Expires=Thu, 05-Jun-2008 05:02:50 GMT; Path=/web2
誰有其他的方法(可以是任何語言或技術)實現自動登入,請跟貼!
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12921506/viewspace-343183/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- python處理web網頁cookies實現自動登入PythonWeb網頁Cookie
- Python自動登入QQ的實現示例Python
- 教你實現windowsxp自動登入大法(轉)Windows
- WinForm應用程式的開機自啟、記住密碼,自動登入的實現ORM密碼
- j2ee cookie 實現自動登入Cookie
- win10系統怎麼設定自動登入 win10電腦實現自動登入的方法Win10
- JSP程式設計實現使用者自動登入功能示例程式碼JS程式設計
- SharedPreferences實現記住密碼----自動登入功能密碼
- JS+PHP實現登入後自動執行之前的操作JSPHP
- 用python登入WeChat 實現自動回覆(非常詳細)Python
- Java Web實現使用者登入功能JavaWeb
- Selenium自動化實現web自動化-1Web
- iOS 實現自動登入(從低階做法到高階做法)iOS
- lubuntu自動登入(lxde)Ubuntu
- 自動登入的設計思路
- linux 實現開機自動登陸Linux
- iTerm2 實現 ssh 自動登入,並使用 Zmodem 實現快速傳輸檔案
- php基礎,php自動載入的實現程式碼示例PHP
- RHCE_LAB(2)SSH遠端登入自動驗證(不輸入使用者登入密碼)的實現薦密碼
- 直播系統原始碼,自動登入及記住密碼實現原始碼密碼
- C#三種模擬自動登入和提交POST資訊的實現方法C#
- [python]web框架中的程式碼自動過載怎麼實現PythonWeb框架
- win10如何設定自動登入 win10設定自動登入的方法Win10
- SecureCRT - 自動登入跳轉Securecrt
- ZendFramework自動載入類的實現方法Framework
- 實現動態自動匹配輸入的內容
- 小程式H5的自動登入(後臺Shiro)H5
- 來往網頁版掃碼自動登入的實現原理(微信也是一樣)網頁
- win10 自動登入如何設定_windows10自動登入的設定步驟Win10Windows
- Python+selenium實現Drcom校園網自動檢測網路以及自動登入Python
- 在Flask程式中實現GitHub登入和GitHub資源互動FlaskGithub
- 關於接入微博登入的程式碼實現
- 基於gin的golang web開發:實現使用者登入GolangWeb
- 小程式各種姿勢實現登入
- 易語言實現一個登入程式
- 讓WindowsXP也能自動登入Windows
- js實現的文字框輸入內容自動提示效果程式碼JS
- Python培訓分享:python如何用cookie實現自動模擬登入?PythonCookie