欧美日韩国产一区,亚洲一区视频,色综合久久久久,私密按摩师舌头伸进去了,99re6这里只有精品,夜夜性日日交xxx性hd

javaweb(2.5)session

  • • 發表于 8年前
  • • 作者 大妖怪
  • • 3004 人瀏覽
  • • 10 條評論
  • • 最后編輯時間 8年前
  • • 來自 [技 術]

原創聲明:本文為作者原創,未經允許不得轉載,經授權轉載需注明作者和出處

我們平常登錄網站,比如登錄QQ空間,當你登錄了進去操作,一切正常。如果你有事走了半天,網頁還開著,那么你再去操作當前登錄的QQ空間你會發現不管你刷新還是點什么,都會讓你跳到登錄頁面,這就是說明你長時間未操作,登錄過期了。而且細心的你會發現可能每個網站的過期時間都不一樣, 百度貼吧可能是十分鐘,QQ空間的可能是5分鐘。那么,這個過期時間是如何實現的呢?

  • 在我們后端有個叫HttpSession的東西,以下簡稱session。這個session是瀏覽器訪問服務端創建的一個HttpSession對象,代表了一次服務器和瀏覽器之間的會話,這個會話可以是連續的也可以斷斷續續。(此處強調了和瀏覽器之間的會話,是因為后端還可以和移動端對接,但是移動端并沒有session的概念,以后我們會講到移動端如何維護會話)
  • session維持瀏覽器和服務端會話的原理是:當瀏覽器訪問成功后,我們先用以下方法獲取session對象,HttpSession session = request.getSession(boolean flag);當flag = true時,服務器在默認的情況下,會將sessionId以cookie的機制發送給瀏覽器,瀏覽器保存cookie,當瀏覽器再次訪問服務器時,會將cookie中的sessionId發送給服務器,服務器根據sessionId就可以找到對應的session對象并且將其更新。當flag = false時,服務器會先查看請求中是否包含sessionId,如果沒有,返回null,此時說明會話過期,頁面跳到登錄頁面。如果有返回sessionId對應的session對象
  • 我們還有一種獲取session的方式HttpSession session = request.getSession();此方法等效于HttpSession session = request.getSession(true);
  • 以上的方式都是默認的過期時間的(ps:忘了是多少秒了~),我們還可以手動設置session的過期時間:

    • session.setMaxInactiveInterval(interval)方法體內的參數interval為秒
    • web.xml里配置如下信息
      <session-config>
      <session-timeout>時間長度(單位為分鐘)</session-timeout>
      </session-config>
      
    • 在tomcat/conf/server.xml中定義defaultSessionTimeOut=時間長度(分鐘)

    • 以上三種方式中當值為-1時,session永不失效

    • 三種方式的優先級為:第一種方式>第二種方式>第三種方式
  • HttpSession的生命周期:
    • 創建:當客戶端瀏覽器第一次訪問服務器時,服務器為每個瀏覽器創建不同的HttpSession對象。在服務器端使用request.getSession()方法來獲得HttpSession對象,并以此來使用HttpSession接口為我們提供的防法
    • 使用:
      • void setAttribute(String name,Object value):進行數據的保存
      • Object getAttribute(String name):進行數據的讀取
    • 結束
      • 關閉瀏覽器,結束session
      • 調用HttpSession的invalidate()方法,刪除HttpSession對象和數據
      • 兩次訪問時間間隔大于session定義的非活動時間間隔
        注:在session結束時,服務器會清空當前瀏覽器相關的數據信息

接下來是簡單的實戰:

  • 在之前的基礎上我們建個登錄jsp頁面login.jsp,并在body中寫上代碼:
    <!-- 表單提交,method使用post方法方法servlet中的dopost,action為login表示web.xml配置了的url是login -->
    <form method="post" action="login">
      用戶名:<input type="text" name="username" width="100"/><br/><!-- 用戶名提交到后臺的字段是 username-->
      密碼:<input type="password" name="password" width="100"/> <br/><!-- 密碼提交到后臺的字段是 password-->
      <input type="submit" name="登錄" value="登錄">
    </form>
    
  • 寫一個loginServlet,順便重寫post方法:
@Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    PrintWriter out=resp.getWriter();//獲取輸出到網頁的對象

    HttpSession session=req.getSession();//獲得session

    String uesrValue=(String)session.getAttribute("user");//獲取session存儲的屬性值

    if(uesrValue==null){//還沒有登錄過
        String username=req.getParameter("username");//從表單中獲取用戶名
        String password=req.getParameter("password");//從表單中獲取密碼
        out.println("你還未登錄<br/>");
        session.setAttribute("user", username);//設定session中的用戶名
        session.setAttribute("password",password);//設定session中的密碼
        out.println(session.getId());//打印session ID
    }
    else{
        String username=(String)session.getAttribute("user");//從session中獲取用戶名
        String password=(String)session.getAttribute("password");//從session獲取密碼
        out.println("用戶名:"+username+"<br/>");
        out.println("密 碼:"+password+"<br/>");
        session.invalidate();//使session無效
    }
    out.close();
}

運行完之后,我們手動在項目中訪問login.jsp頁面,輸入以上方法,當我們第一次隨便輸入用戶名和密碼并且腦子里記下,然后訪問:
第一次訪問如下

這個表示之前沒有用這個用戶名登錄,這是首次登錄,然后傳回了sessionId。
然后我們退回去,用剛剛的賬號密碼登錄:

如圖就打印了登錄的用戶名和密碼(因為剛剛登錄保存了會話)

以上工程文件放在了網盤,要看源碼的可以自己去下:
http://pan.baidu.com/s/1cxlOJG

鳴謝:最近時間緊,上文的邏輯是根據文章http://blog.csdn.net/ccy0815ccy/article/details/21033523中的源碼修(chao)改(xi)而來。

分享到:
10條評論
Ctrl+Enter
作者

大妖怪

大妖怪

APP:1 帖子:76 回復:200 積分:7517

已加入社區[3076]天

夢里巷口,可有你倚門回首

作者詳情》
Top