本篇講述JSP中session的相關知識和管理方法;
先說說cookie與session
在web中常用的兩種用戶信息管理方式:cookie 和 session.
cookie是保存在用戶客戶端的數據,用於避免每次發送http請求時,連帶過多的數據,造成復雜化。所以Cookie保存在客戶端中,根據服務器端的要求,保存特定的內容,在每次http請求后,自動添加一定的內容。
session是保存在服務器端的數據,用於驗證幾次請求是否屬於同一會話,在同一會話中,會避免進行不必要的驗證,保證用戶的操作連貫性。
合理的使用session與cookie都會保證web應用的高可以用性,以及良好的用戶體驗。但是不必要的操作也會影響到web安全風險和服務器的使用效率。
session常用的方法
session是JSP中的一個內置對象,可以在JSP代碼中直接使用,他是HttpSession的實例,常用的方法如下:
<% SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss"); Date d = new Date(session.getCreationTime()); session.setAttribute("username","xingoo"); session.setAttribute("password","123"); session.setAttribute("age","26"); //設置Session生命期限 //session.setMaxInactiveInterval(2); %> Session創建時間:<%=sdf.format(d) %><br> Session的ID編號:<%=session.getId() %><br> Session獲取:<%=session.getAttribute("username") %><br> Session中保存的屬性:<% String[] names = session.getValueNames(); for(int i=0;i<names.length;i++){ out.println(names[i]+" "); } %><br> <% //session.invalidate();//執行銷毀后,服務器直接就刪除了會話的相關內容; %>
可得到如下的結果:
session聲明周期
session生命周期中包含3個階段:
1 創建
在第一次用戶訪問JSP頁面時,會創建相應的session,保存在服務器中。之后的請求,服務器都會攜帶此session id進行校驗。
2 活動
在同一會話期間,打開新的鏈接都屬於同一會話。
3 銷毀
關閉瀏覽器;使用session.invalidate()銷毀session;會話過期
管理session過期
session默認時30分鍾過期。
1 通過函數方法設置過期時間,單位為秒
session.setMaxInactiveInterval(60);//單位是秒
2 配置web.xml,單位為分鍾
<session-config> <session-timeout>1</session-timeout> </session-config>
通過tomcat監控管理session
如果第一次登陸tomcat管理界面,會報用戶權限錯誤,需要手動為tomcat設置用戶密碼以及用戶權限。
在conf目錄中,打開tomcat-users.xml
在tocmat-users標簽中添加下面兩行:
<tomcat-users> <role rolename="manager-gui"/> <user username="tomcat" password="tomcat" roles="manager-gui"/> </tomcat-users>
manager-gui用於授予用戶 通過html管理tomcat 權限。
登陸后點擊 tomcat manager
在提示對話框中輸入用戶名密碼,技能看到下面的管理界面
可以看到當我們訪問某個有session內容的頁面后,工程中的session數目變成了1.
由於在web.xml中配置了session的過期時間為1分鍾,因此后面的時間也顯示了1分鍾。
點擊 數字1超鏈接 ,就能進入session目錄!
可以看到session相關的內容,可以點擊上面的按鈕,刷新session管理界面。
點擊sessionid 超鏈接,可以進入session的詳細頁面,參考如下:
可以根據該頁面,檢查session的相關內容等信息。
注意:由於我使用的是tomcat 6,所以其他版本登陸位置可能有所不同。
在Eclipse重啟Tomcat,tomcat-users.xml被重置
出現上面現象的原因是,你的eclipse在綁定tomcat后,工程中多了一個叫server的工程。
打開該工程會發現有幾個配置文件,在eclipse重啟tocmat,會把這幾個配置文件覆蓋到我們自己安裝的tocmat中。
因此修改這里的配置文件,即可!