<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 312, 文章 - 14, 評論 - 1393, 引用 - 0
    數據加載中……

    實現Java 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 IDJSESSIONID 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,則按著pathname進行比較,如果這兩個值相同,則認為是同一個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

        由于下面兩個Cookiepath不同,因此,它們是完全不同的兩個Cookie

    Set-Cookie: JSESSIONID=DDB2274CAC6739E1D6747B0043D5D90E; Path=/web1

    Set-Cookie: JSESSIONID=mysession; Expires=Thu, 05-Jun-2008 05:02:50 GMT; Path=/web2


    誰有其他的方法實現自動登錄,請跟貼!






    Android開發完全講義(第2版)(本書版權已輸出到臺灣)

    http://product.dangdang.com/product.aspx?product_id=22741502



    Android高薪之路:Android程序員面試寶典 http://book.360buy.com/10970314.html


    新浪微博:http://t.sina.com.cn/androidguy   昵稱:李寧_Lining

    posted on 2008-06-05 13:49 銀河使者 閱讀(12910) 評論(8)  編輯  收藏 所屬分類: web 原創

    評論

    # re: 實現Java Web程序的自動登錄[未登錄]  回復  更多評論   

    有幾個問題需要和你探討一下
    1、為什么要長時間保存Session,這樣不利用大量的請求,除非在用戶很少的情況下。
    2、可以使用Cookie把用戶名和處理以后的密碼存入,下次訪問可以使用新的Session進行權限驗證就是了。至于該用戶的原Session信息。,可以采用其他方式保存下來,下次登錄進來驗證通過在加載就可以了
    2008-06-06 18:07 | Samuel

    # re: 實現Java Web程序的自動登錄  回復  更多評論   

    要保存用戶的信息,只能在客戶端或服務端來保存,如果在客戶端的cookie保存,有些信息無法保存,或比較麻煩,如對象等。

    在本例中因為我要實現當出現用戶登錄界面時,顯示用戶名,而這在可能要保存一年時間,而我又不想在一年內都自動登錄,所以用了session,并設了兩個小時。


    第二個問題。當然可以只使用cookie來保存用戶名和密碼。只因為我要實現短時間的自動登錄,所以才用了session。
    2008-06-06 18:16 | 銀河使者

    # re: 實現Java Web程序的自動登錄  回復  更多評論   

    現在我想知道的是除了將用戶名和密碼保存在cookie中,或使用session,還有沒有別的方法。
    2008-06-06 18:55 | 銀河使者

    # re: 實現Java Web程序的自動登錄  回復  更多評論   

    @銀河使者
    我覺得 都不好
    一個session存的時間太長
    第二cookie一點都不安全
    想想就兩個cookies 一個用戶名 一個密碼 就當真的被人看不出里面是什么意義
    但無論怎么樣 只要有這兩個cookies 你就能登陸
    別人也可以用js寫出cookies 所以一點都不安全
    2009-07-27 20:10 | 兔乃伊

    # re: 實現Java Web程序的自動登錄  回復  更多評論   

    我覺得可以這樣
    把session里面的內容持久化的數據庫
    登錄的時候去數據庫查查
    如果有自動登錄信息的話
    就開一個新的session給他
    然后把登錄信息存在session里面
    這樣我覺得可行
    2009-07-27 20:23 | 兔乃伊

    # re: 實現Java Web程序的自動登錄  回復  更多評論   

    用監聽的方法 session失效 就持久化
    2009-07-27 20:24 | 兔乃伊

    # re: 實現Java Web程序的自動登錄  回復  更多評論   

    還不錯,如果能用一個完整的項目案例就好了
    2013-01-05 10:35 | bbkwang

    # re: 實現Java Web程序的自動登錄  回復  更多評論   

    天賦
    2016-06-02 16:05 | 委屈
    主站蜘蛛池模板: 全部免费毛片在线| 亚洲国产日韩在线视频| 国产亚洲精品第一综合| 亚洲欧洲精品无码AV| 免费影院未满十八勿进网站| AV激情亚洲男人的天堂国语| 亚洲国产成人精品无码区在线观看| 青娱乐免费视频在线观看| 特级毛片A级毛片100免费播放| 亚洲男人第一av网站| 久久久久久久久免费看无码| xxxxx做受大片在线观看免费| 亚洲视频在线观看| 国产日产成人免费视频在线观看| 国产一级片免费看| 亚洲片国产一区一级在线观看| 免费在线看黄网站| 亚洲av永久无码精品秋霞电影秋| 亚洲国产精品嫩草影院在线观看 | 国产成人综合亚洲| 亚洲性色AV日韩在线观看| 亚洲av专区无码观看精品天堂| 亚洲综合网美国十次| 亚洲国语精品自产拍在线观看| 亚洲人成人77777网站| 亚洲中文字幕第一页在线| 亚洲欧洲日产国码一级毛片| 亚洲福利精品一区二区三区| 222www免费视频| 51视频精品全部免费最新| 真实国产乱子伦精品免费| 99精品视频在线视频免费观看| 午夜精品一区二区三区免费视频| 人人玩人人添人人澡免费| 污视频在线观看免费| 99精品免费观看| 18勿入网站免费永久| 水蜜桃视频在线观看免费播放高清| 亚洲中文字幕无码一去台湾| 亚洲人成网男女大片在线播放| 亚洲无mate20pro麻豆|