session對象
session對象是 javax.servlet.http.HttpSession 類的執行個體。和Java Servlets中的session對象有一樣的行為。
session對象用來跟蹤在各個用戶端請求間的會話。
主要方法:
每個使用者都是一個不同的session,伺服器通過session id區分不同的使用者,用
<%String id = session.getId();%>
查看Id
在Cookie中自動化佈建的那個cookie就是使用者的session id,所以,session在操作時使用了cookiede 處理機制,如果伺服器重啟,session id要重新分配
如果要保留,就要使用序列化機制
登陸和登出
這是session用的最多的地方
session 在所有項目中用的最多的地方就是登陸驗證以及登出
測試,登陸頁面(根據之前的登陸頁面改進):
login.jsp
<%@ page contentType = "text/html" pageEncoding = "GBK"%><%@ page import = "java.sql.*"%><html><head><title>www.thystar.com</title></head><body><center><h1>登陸操作</h1><hr><form action = "login.jsp" method = "post"><table border = "1"><tr><td colspan="2">使用者登入</td></tr><tr><td>登陸ID</td><td><input type = "text" name = "id"></td></tr><tr><td>登陸密碼</td><td><input type = "password" name = "password"></td></tr><tr><td colspan = "2"><input type = "submit" value = "登陸"><input type = "reset" value = "重設"></td></tr></table></form><%! //串連資料庫public static final String DBDRIVER = "org.gjt.mm.mysql.Driver";public static final String DBURL = "jdbc:mysql://localhost:3306/usr";public static final String DBUSER = "root";public static final String DBPASS = "mysqladmin";%><% //初始化連線物件Connection conn = null;PreparedStatement pstmt = null;ResultSet rs = null;boolean flag = false;String name = null; //接受使用者姓名%><% //操作資料庫,尋找使用者名稱和密碼try{Class.forName(DBDRIVER);conn = DriverManager.getConnection(DBURL, DBUSER, DBPASS);String sql = "SELECT name FROM login WHERE userid = ? AND password = ?";pstmt = conn.prepareStatement(sql);pstmt.setString(1, request.getParameter("id"));pstmt.setString(2, request.getParameter("password"));rs = pstmt.executeQuery();if(rs.next()){flag = true;name = rs.getString(1);}}catch(Exception e){System.out.println(e);}finally{try{rs.close() ;pstmt.close() ;conn.close() ;} catch(Exception e){}}%><% if(flag){response.setHeader("refresh","2; URL = welcome.jsp"); //定時跳轉session.setAttribute("userid", name); //將登入的使用者名稱儲存%><h3>使用者登入成功,兩秒後跳轉</h3><h3>如果沒有跳轉,請按這裡</h3><%}}else{%><h3>登入錯誤</h3><%}%></body></html>
welcome.jsp
<%@ page contentType = "text/html" pageEncoding = "GBK"%><html><head><title>www.thystar.com</title></head><body><%if(session.getAttribute("userid")!=null){%><h3>歡迎<%=session.getAttribute("userid")%>, <a href = "logout.jsp">登出</a></h3><%}else{%><h3>請先<a href = "login.jsp">登入</a></h3><%}%></body></html>
logout.jsp
<%@ page contentType = "text/html" pageEncoding = "GBK"%><html><head><title>www.thystar.com</title></head><body><%response.setHeader("refresh","2; URL=login.jsp");session.invalidate();%><h3>已退出本系統,2秒後跳轉</h3><h3>如果沒有跳轉,按<a href = "login.jsp">這裡</h3></body></html>
但是這個頁面是有問題的,就是“登陸錯誤”這個資訊一直會出現,直到你輸入正確的資訊跳轉。暫時不會解決,再往後學看看。
會話跟蹤有一下四種技術:
通過session提供的方法儲存 通過Cookie 通過表單的隱藏欄位完成 通過地址修正