<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 | 委屈
    主站蜘蛛池模板: 97视频免费观看2区| 春暖花开亚洲性无区一区二区| 亚洲成人免费在线观看| 亚洲一区二区久久| 国产国产人免费人成免费视频| 三年片在线观看免费观看大全中国| 亚洲国产精品一区二区久久hs| 99久久国产热无码精品免费| 国产成人亚洲综合无| 亚洲中文字幕久久精品无码喷水| 曰批视频免费40分钟试看天天| 亚洲av成人一区二区三区观看在线| 国精无码欧精品亚洲一区| xxxxx免费视频| av网站免费线看| 亚洲中文字幕无码av在线| 久久久久亚洲?V成人无码| 欧洲一级毛片免费| 免费无遮挡无遮羞在线看| 亚洲伊人久久大香线蕉| 亚洲夜夜欢A∨一区二区三区| 国产香蕉九九久久精品免费| 怡红院免费的全部视频| 亚洲性无码AV中文字幕| 婷婷亚洲久悠悠色悠在线播放| 四虎成人免费观看在线网址| 久久成人18免费网站| 国产最新凸凹视频免费| 1000部免费啪啪十八未年禁止观看 | 亚洲永久永久永久永久永久精品| 成人午夜18免费看| 97人妻精品全国免费视频 | 免费A级毛片无码A∨中文字幕下载 | 日本媚薬痉挛在线观看免费| 国产精品99久久免费观看| 黄色一级视频免费观看| 亚洲人成网站日本片| 亚洲综合视频在线| 国产中文在线亚洲精品官网| 又粗又大又猛又爽免费视频| 成年男女免费视频网站|