<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 | 委屈
    主站蜘蛛池模板: 国产免费看JIZZ视频| 亚洲理论片中文字幕电影| 成全高清视频免费观看| 日本卡1卡2卡三卡免费| 成人免费网站视频www| 亚洲性无码一区二区三区| 亚洲国产高清在线| 亚洲一区二区女搞男| 免费中文字幕不卡视频| 成人免费男女视频网站慢动作 | 精品久久久久国产免费| 无码人妻丰满熟妇区免费| 国产99视频精品免费视频76| 国产成人亚洲综合无| 亚洲国产欧美日韩精品一区二区三区| 亚洲最大在线观看| 亚洲综合色一区二区三区小说| 久久亚洲国产欧洲精品一| 国产午夜亚洲精品理论片不卡| 国产一区二区三区无码免费| 免费看无码自慰一区二区| A在线观看免费网站大全| 波多野结衣免费在线观看| 99热在线观看免费| 96免费精品视频在线观看| 青青在线久青草免费观看| 1000部夫妻午夜免费| 啦啦啦完整版免费视频在线观看| 日本视频免费高清一本18| 男人的天堂网免费网站| 日本视频免费高清一本18| 免费A级毛片无码专区| 91制片厂制作传媒免费版樱花| 久久99精品免费视频| 99视频精品全部免费观看| 69免费视频大片| 99爱在线精品免费观看| 毛片免费视频播放| 国产无遮挡色视频免费视频| 波多野结衣一区二区免费视频| 亚洲国产精品成人久久蜜臀|