<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 | 委屈
    主站蜘蛛池模板: 18gay台湾男同亚洲男同| 亚洲欧洲自拍拍偷精品 美利坚| 精品亚洲永久免费精品| 国产精品免费久久| 中文字幕亚洲天堂| a级毛片毛片免费观看久潮| 国内精品久久久久久久亚洲| 亚洲视频在线免费| 中文字幕精品亚洲无线码二区| 国产免费牲交视频免费播放| 在线播放亚洲第一字幕| 国产精品网站在线观看免费传媒| 亚洲精品无码精品mV在线观看| 日本免费久久久久久久网站| 亚洲综合一区二区国产精品| 波多野结衣在线免费视频 | 亚洲天天在线日亚洲洲精| 国产一区二区三区免费观看在线| 亚洲国产精品无码久久久不卡| 91av视频免费在线观看| 亚洲日本va在线观看| 国产成人免费全部网站| 一级毛片成人免费看a| 亚洲av永久无码精品古装片| 18pao国产成视频永久免费| 亚洲综合色丁香婷婷六月图片| 国产成人无码免费视频97| 一个人晚上在线观看的免费视频| 亚洲精品无码mv在线观看网站| 99久久精品免费精品国产| 国产午夜亚洲精品| 亚洲性日韩精品一区二区三区| 国产成人AV片无码免费| 亚洲中文无码av永久| 亚洲国产成人爱av在线播放| 国内永久免费crm系统z在线| 色婷五月综激情亚洲综合| 国产91精品一区二区麻豆亚洲| 毛片无码免费无码播放| 激情小说亚洲色图| 国产成人精品日本亚洲网站|