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>