1. 程式人生 > >玩轉web之servlet(六)---session介紹及簡單使用(登入驗證中儲存資訊)

玩轉web之servlet(六)---session介紹及簡單使用(登入驗證中儲存資訊)

在瀏覽器與伺服器進行互動時,往往需要把涉及到的一些資料儲存下來,這時就需要使用cookie或session進行狀態管理。

這篇文章先來說說session怎麼用,首先在servlet中建立一個session來儲存資訊,舉個例子,在做登陸驗證時,如果登陸成功,需要將使用者的資訊儲存到session中,怎麼儲存呢?下面給出程式碼:

 public class Login_Do extends HttpServlet {
	String order_name = "";
	String order_password = "";
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
			this.doPost(request, response);
	}
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		request.setCharacterEncoding("utf-8"); 
		response.setCharacterEncoding("utf-8");
		order_name= new String(request.getParameter("name").getBytes("ISO-8859-1"),"utf-8") ; 
	    order_password = request.getParameter("password");
		PrintWriter out = response.getWriter();
		JSONObject json = new JSONObject();
		String msg = ""; 
		try {
			json.put("msg",login());
			out.print(json.toString());
			HttpSession session = request.getSession();
			session.setAttribute("user_name", login());
			
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	public String login() throws SQLException{
		Order_User_Dao u = new Order_User_Dao();
		Order_User user = new Order_User();
		user = u.login(order_name,order_password);
		if(!"".equals(user.getUser_name())){ 
			return user.getUser_name();  //如果登陸成功,會返回使用者的使用者名稱
		}
		else
			return null;
	}
}

關於session的建立是那兩行紅色字型,將使用者名稱繫結到了session物件上,那怎麼使用呢?
HttpSession session = request.getSession();
String user_name = String.valueOf(session.getAttribute("user_name"));

使用這個方法,無論是在servlet中,還是前臺指令碼段裡,都可以輕鬆的獲取所需要的資訊。
再來說說怎麼清楚session,當瀏覽器關閉時,我們需要清除掉session,一個是考慮到安全性,一個是要確保你退出後其他使用者可以登入,這就用到session的invalidate方法了。
在jsp中,當退出時寫上
<%
 session.invalidate();
%>

就會清除掉繫結在session上的資訊。
關於session的優缺點:
優點:1:session會將所有狀態寫在伺服器端,所以相對於cookie比較安全,一般用來儲存登入使用者的資訊或其他重
要資訊
2:session可以儲存的資料型別比較豐富,而cooike只能儲存字串
3:session儲存的資料大小更大,而cooike只能儲存大約4k的資訊,理論上session是沒限制的
缺點:由於將資訊儲存到伺服器端,對系統資源佔用比較大。