<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深夜影院| 亚洲国产系列一区二区三区| 亚洲色欲久久久综合网东京热| 青春禁区视频在线观看直播免费| 国产一级a毛一级a看免费视频| 亚洲最大av资源站无码av网址| 亚洲AV人无码综合在线观看| 亚洲国产综合久久天堂| 女人与禽交视频免费看| 91久久青青草原线免费| 中文字幕av无码不卡免费| 最新亚洲人成无码网www电影| 亚洲制服丝袜精品久久| 亚洲国产成人久久综合碰碰动漫3d| 丁香亚洲综合五月天婷婷| 特级做A爰片毛片免费69| 97青青草原国产免费观看| 国产精品永久免费视频| 免费无码国产V片在线观看| 亚洲国产精品日韩av不卡在线| 亚洲六月丁香六月婷婷色伊人 | 亚洲国产精品无码久久久| 亚洲国产精品无码久久久蜜芽 | 亚洲精品高清国产麻豆专区| 亚洲精品无码午夜福利中文字幕 | 丝瓜app免费下载网址进入ios| 美美女高清毛片视频黄的一免费| 亚洲AV无码资源在线观看| 亚洲一线产品二线产品| 亚洲一区二区三区在线观看网站| 亚洲中文无码mv| 麻豆亚洲AV成人无码久久精品| 亚洲成av人片在www鸭子| 亚洲精品无播放器在线播放| 亚洲精品无码一区二区| 色天使亚洲综合一区二区| 国产亚洲精品第一综合| 免费在线观看一区| av电影在线免费看| 精品一区二区三区免费|