原創聲明:本文為作者原創,未經允許不得轉載,經授權轉載需注明作者和出處
我們平常登錄網站,比如登錄QQ空間,當你登錄了進去操作,一切正常。如果你有事走了半天,網頁還開著,那么你再去操作當前登錄的QQ空間你會發現不管你刷新還是點什么,都會讓你跳到登錄頁面,這就是說明你長時間未操作,登錄過期了。而且細心的你會發現可能每個網站的過期時間都不一樣, 百度貼吧可能是十分鐘,QQ空間的可能是5分鐘。那么,這個過期時間是如何實現的呢?
以上的方式都是默認的過期時間的(ps:忘了是多少秒了~),我們還可以手動設置session的過期時間:
<session-config>
<session-timeout>時間長度(單位為分鐘)</session-timeout>
</session-config>
在tomcat/conf/server.xml中定義defaultSessionTimeOut=時間長度(分鐘)
以上三種方式中當值為-1時,session永不失效
接下來是簡單的實戰:
<!-- 表單提交,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>
@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)而來。