Cookie 将数据存储到客户端
Cookie是一种会话技术,把会话数据放到浏览器中,相当于服务器办会员卡。
客户——服务器——客户 --》第二阶段服务器会返回一个Cookie保存到客户端
- 再次请求时所有Cookie会被发送到服务器
- 在请求头中,方便服务器对浏览器做出相应
set-cookie头字段
set-cookie:user(名)=itcast;Path=/;(值)(路径,默认当前浏览器)
- setMaxAge(int second) 正数:持久化到硬盘上;负数:默认值-1存在浏览器内存(缓存)中;0:删除cookie
- setPath(String url) 和getPath() 针对Cookie的Path属性,如果创建的某个Cookie对象没有设置属性,那么改Cookie只对当前访问路径所属文件及目录有效,如果让某个Cookie项对站点的所有目录下的访问路径都有效,应调用Cookie对象的setPath()方法将Path属性设置为"/"
- setDomain(String pattern) 和getDomain() 针对domain属性,domain指定浏览器访问的域,值要用.开头,默认情况下domain为当前主机名,,浏览器在访问当前主机的资源时,都会将Cookie的消息返回服务器,domain属性不区分 大小写
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;Charset=utf-8");
PrintWriter out = response.getWriter();
Cookie cookie[] = request.getCookies(); //读取本地Cookie
String ltime = null;
String name="";
for(int i=0;i<cookie.length&&cookie!=null;i++){
if("qyc".equals(cookie[i].getName())){ //cookie的name
name = cookie[i].getName();
ltime = cookie[i].getValue(); //cookie的value设定的是最后访问时间
}
}
if(ltime!=null){ //判断时间为空的话,说明是第一次访问
out.print(name+"上次登陆时间:"+ltime);
}
else {
out.print(name+"第一次登陆");
}
String time = new SimpleDateFormat().format(new Date()); //当前时间
Cookie cookie2 = new Cookie("qyc", time); //设置cookie
response.addCookie(cookie2); //添加cookie
}
Session 将数据存储到服务器端
原理:用户请求时,服务器先创建session出来后,会把session的id号,以cookie的形式回响应给客户端;这样只要客户机的浏览器不关,再去访问服务器时,都会带着session的id号去,服务器发现客户机浏览器带session的id过来了,就会使用服务器内存中与之对应的session为之服务。
具体:在打开浏览器第一次请求该jsp的时候,服务器会自动(理解--服务器对应的代码)为其创建一个session,并赋予其一个session ID,发送给客户端的浏览器。以后客户端接着请求本应用中其它资源的时候,会自动在请求头上添加:Cookie:JSESSIONID=客户端第一次拿到的session ID,这样服务器端在接到请求时候,就会收到session ID,并根据ID在浏览器的内存中找到之前创建的session对象,提供给请求使用
服务器以cookie的方式返回给浏览器ID
思考①:浏览器关闭了,再次请求session一样吗?
答:不一样了,浏览器关闭了(相当于会话结束),默认session仅存活于当前的会话中(如果没有将session持久化,保存的jsessionid没了),相当于创建了一个新的session
思考②:服务器关闭了,再次请求session一样吗?
答:也不一样,会话结束,内存(缓存)释放了,但是虽然对象不一样了,但是session中存储的数据还是一样的
登陆
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
String name = request.getParameter("name");
String pass = request.getParameter("password");
System.out.println("读取表格成功");
JavaBSession peo = new JavaBSession();
peo.setName(name);
peo.setPassword(pass);
JavaBSession peo1 = new JavaBSession();
Thelogin loginThelogin = new Thelogin();
peo1 = loginThelogin.loginjc(peo);
if(peo1!=null){
System.out.println("登陆成功");
request.getSession().setAttribute("qyc", peo1);
request.getRequestDispatcher("index.jsp").forward(request, response);
}
else{
System.out.println("登陆失败");
request.getRequestDispatcher("MyLog.jsp").forward(request, response);
}
}
退出
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
request.getSession().removeAttribute("user");
request.getRequestDispatcher("MyLog.jsp").forward(request, response);
System.out.println("退出成功");
}
index.jsp
<script>
function tuichu(){
location.href = "ServletTuichu";
}
</script>
<body>
<button type="button" onclick="tuichu()">退出登陆</button>
</body>