session的特點
a.session存儲在伺服器
b.session是在同一個使用者(客戶)請求時共享
c.session實作機制
第一次客戶請求時,産生一個sessionid并且複制給cookiedejssionid
然後,發送給用戶端,
最終,通過session的sessionid與cookie的jsessionid實作一一對應的關系
d.同一次會話共享session
session與cookie的差別
a.session儲存的位置在服務端,cookie儲存的位置在用戶端
b.session較安全,cookie較不安全
c.session儲存的内容為Object,cookie儲存的内容為string
cookie補充說明*
a.服務端在第一次響應用戶端時,若服務端發現此請求沒有JSESSIONID,
則會自動建立并傳回一個name=JSESSIONID的cookie
b.cookie不是内置對象,要使用,必須new
應用案例:建立login.jsp頁面送出資料到check.jsp頁面(作為服務端産生cookie),再由該頁面跳轉到welcome.jsp頁面。另建立一個a.jsp頁面來檢視session産生的cookie與JSESIONID
login.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="check.jsp" method="post">
使用者名:<input type="text" name="uname"><br>
密碼:<input type="password" name="upwd"><br>
<input type="submit" value="登入"><br>
</form>
</body>
</html>
check.jsp
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
request.setCharacterEncoding("utf-8");
String name=request.getParameter("uname");
String pwd=request.getParameter("upwd");
if(name.equals("zs")&&pwd.equals("abc")){
//登入成功的話将其值賦給session對象
//隻有登入成功,session中才會存在uname/upwd
session.setAttribute("uname", name);
session.setAttribute("upwd", pwd);
//将sessionId列印到控制台
System.out.println("SESSIONID-----"+session.getId());
//服務端産生cookie
//Cookie cookie=new Cookie("uname",name);
//response.addCookie(cookie);
//服務端在第一次響應用戶端時,會自動發送一個JSESSIONID的cookie
//設定最大有效非活動時間(10s)
//session.setMaxInactiveInterval(10);
request.getRequestDispatcher("welcome.jsp").forward(request, response);
}
else{
//登入失敗則重新登入
response.sendRedirect("login.jsp");
}
%>
</body>
</html>
welcome.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
歡迎您:
<%
//将object轉成string對象
String name=(String)session.getAttribute("uname");
//優化
//如果沒有登入,則跳轉到登入頁面
if(name!=null){
out.print(name);
//
//java代碼中嵌套html代碼
//加一個超連結實作session的登出
%>
<a href="invalidate.jsp" target="_blank" rel="external nofollow" >登出</a>
<%
}else{
response.sendRedirect("login.jsp");
}
%>
</body>
</html>
a.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
//同一次會話共享session
//實作登出後,無法通路該(uname)字段
%>
<%
out.print(session.getAttribute("uname"));
Cookie[] cookies=request.getCookies();
for(Cookie cookie:cookies){
if(cookie.getName().equals("JSESSIONID")){
System.out.println("JSESSIONID-----"+cookie.getValue());
}
}
%>
</body>
</html>
invlidate.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
//實作seission的登出
session.invalidate();
response.sendRedirect("login.jsp");
//指定失效字段(一般不推薦)
//session.removeAttribute("uname");
%>
</body>
</html>