java自学之路-----Servlet_Cookie,Session
2014-11-18 20:43
405 查看
cookie:客户端技术,程序把每个用户的数据以cookie形式写给各自的浏览器,当浏览器再次访问web资源时,就会带着这些数据
session:服务端技术,服务器在运行时为每个浏览器创建一个独享的session对象,由于该session对象是用户浏览器独享,用户就可以带着存在对象中的数据访问web资源
1.一个Cookie只能标识一种信息,他至少含有包含该信息的名字name和值value
2.一个Web站点可以给浏览器发送多个cookie,一个浏览器也可以存储多个web站点发送的cookie
3.浏览器一般只允许存放300个cookie,每个web站点最多存放20个cookie到一个浏览器,每个cookie限制为4kb
4.如果创建了一个cookie,并将它发送给浏览器,默认情况下他是一个会话级别的cookie,即存储在浏览器内存中,用户退出浏览器之后就会被删除。如果希望将浏览器将cookie存储到硬盘上,就需要设置maxAge,并给出一个以秒为单位的时间
5.同名的cookie会被后一个覆盖(先将第一个删除,在存入第二个)
基本使用:(显示上次访问时间)
// 预防中文乱码问题
response.setCharacterEncoding("UTF-8");
response.setHeader("content-type", "text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.print("上次访问的时间为:");
// 获得cookie,遍历,进行安全性判断
Cookie cookies[] = request.getCookies();
for(int i=0; cookies!=null&&i<cookies.length; i++){
// 通过名字来判断是否为需要的cookie数据
if(cookies[i].getName().equals("lastAccessTime")){
// 获得存储的时间,把字符串解析成long型的数值
long time = Long.parseLong(cookies[i].getValue());
// 封装为时间格式
Date date = new Date(time);
out.print(date.toString());
}
}
// 将此时的时间写入cookie
Cookie cookie = new Cookie("lastAccessTime", System.currentTimeMillis()+"");
cookie.setMaxAge(1*30*24*3600);//设置cookie 的有效时间,秒为单位
cookie.setPath("/web");//设置这个cookie的有效路径,
// 将cookie存到浏览器
response.addCookie(cookie);
}
注意:
1.服务器在浏览器第一次获取session的时候自动创建session,并保存在服务器中
2.当浏览器被关闭的时候,session不会被摧毁。默认三十分钟后自动摧毁未使用session
3.如果只需要得到session对象,而不需要使用session,就使用request.getSession(false);
4.ie8多个浏览器客户端共享同一个session对象
// 通过第一次request创建获取session。request.getSession(false);指定是否需要创建session
HttpSession session = request.getSession();
// 给session存值。
session.setAttribute("name", "123");
// 摧毁session,或者通过修改web.xml文件
session.invalidate();
实现原理:
1.当服务器为一个浏览器创建一个session之后,会将Jsessionid存到cookie内并发送给浏览器
2.当该浏览器再次访问服务器就会使用Jsessionid来获得服务器对应的session对象
3.存储Jsessionid的cookie对象是没有有效期限的,浏览器一被关闭就会摧毁cookie
// 保证同一浏览器多次访问同一个session对象
// 1.获取session对象,为其存值
HttpSession session = request.getSession();
session.setAttribute("pass", "halm");
// 2.获得该session的id号
String sessionid = session.getId();
// 3.将该id号存储到新创建的cookie对象,并覆盖之前默认的cookie对象
Cookie cookie = new Cookie("JSESSIONID", sessionid);
cookie.setPath("/web");
cookie.setMaxAge(30*60);
// 4.将cookie存储到硬盘中
response.addCookie(cookie);
}
域对象:
request:显示完数据就不要再次使用数据
session:程序产生数据,除了显示之外还需要使用到数据
servletContext:不仅在此程序中使用,别的程序还要使用该数据(一个web应用一个该对象)
session:服务端技术,服务器在运行时为每个浏览器创建一个独享的session对象,由于该session对象是用户浏览器独享,用户就可以带着存在对象中的数据访问web资源
cookie{
细节:1.一个Cookie只能标识一种信息,他至少含有包含该信息的名字name和值value
2.一个Web站点可以给浏览器发送多个cookie,一个浏览器也可以存储多个web站点发送的cookie
3.浏览器一般只允许存放300个cookie,每个web站点最多存放20个cookie到一个浏览器,每个cookie限制为4kb
4.如果创建了一个cookie,并将它发送给浏览器,默认情况下他是一个会话级别的cookie,即存储在浏览器内存中,用户退出浏览器之后就会被删除。如果希望将浏览器将cookie存储到硬盘上,就需要设置maxAge,并给出一个以秒为单位的时间
5.同名的cookie会被后一个覆盖(先将第一个删除,在存入第二个)
基本使用:(显示上次访问时间)
// 预防中文乱码问题
response.setCharacterEncoding("UTF-8");
response.setHeader("content-type", "text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.print("上次访问的时间为:");
// 获得cookie,遍历,进行安全性判断
Cookie cookies[] = request.getCookies();
for(int i=0; cookies!=null&&i<cookies.length; i++){
// 通过名字来判断是否为需要的cookie数据
if(cookies[i].getName().equals("lastAccessTime")){
// 获得存储的时间,把字符串解析成long型的数值
long time = Long.parseLong(cookies[i].getValue());
// 封装为时间格式
Date date = new Date(time);
out.print(date.toString());
}
}
// 将此时的时间写入cookie
Cookie cookie = new Cookie("lastAccessTime", System.currentTimeMillis()+"");
cookie.setMaxAge(1*30*24*3600);//设置cookie 的有效时间,秒为单位
cookie.setPath("/web");//设置这个cookie的有效路径,
// 将cookie存到浏览器
response.addCookie(cookie);
}
session{
该对象由服务器自动创建,开发人员通过request的方法获得session对象,再进行操作注意:
1.服务器在浏览器第一次获取session的时候自动创建session,并保存在服务器中
2.当浏览器被关闭的时候,session不会被摧毁。默认三十分钟后自动摧毁未使用session
3.如果只需要得到session对象,而不需要使用session,就使用request.getSession(false);
4.ie8多个浏览器客户端共享同一个session对象
// 通过第一次request创建获取session。request.getSession(false);指定是否需要创建session
HttpSession session = request.getSession();
// 给session存值。
session.setAttribute("name", "123");
// 摧毁session,或者通过修改web.xml文件
session.invalidate();
实现原理:
1.当服务器为一个浏览器创建一个session之后,会将Jsessionid存到cookie内并发送给浏览器
2.当该浏览器再次访问服务器就会使用Jsessionid来获得服务器对应的session对象
3.存储Jsessionid的cookie对象是没有有效期限的,浏览器一被关闭就会摧毁cookie
// 保证同一浏览器多次访问同一个session对象
// 1.获取session对象,为其存值
HttpSession session = request.getSession();
session.setAttribute("pass", "halm");
// 2.获得该session的id号
String sessionid = session.getId();
// 3.将该id号存储到新创建的cookie对象,并覆盖之前默认的cookie对象
Cookie cookie = new Cookie("JSESSIONID", sessionid);
cookie.setPath("/web");
cookie.setMaxAge(30*60);
// 4.将cookie存储到硬盘中
response.addCookie(cookie);
request.getSession();//需要先获得对象,才能对地址重写 //如果浏览器禁用cookie就会重写,为url附加上sessionid,如果浏览器带着(未禁用)cookie就不会重写,localhost不恩能重写 String url = response.encodeURL("/web_review/index.jsp");
}
域对象:
request:显示完数据就不要再次使用数据
session:程序产生数据,除了显示之外还需要使用到数据
servletContext:不仅在此程序中使用,别的程序还要使用该数据(一个web应用一个该对象)
相关文章推荐
- tomcat7 启动项目报错 java.lang.NoSuchMethodError: javax.servlet.ServletContext.getSessionCookieConfig()
- java学习之Servlet之--Cookie,Session,Application
- java.lang.NoClassDefFoundError: javax/servlet/SessionCookieConfig
- java web——Session/Cookie/Servlet 详解
- java.lang.NoClassDefFoundError: javax/servlet/SessionCookieConfig
- java自学之路-----Servlet_基础
- 提示 java.lang.NoClassDefFoundError: javax/servlet/SessionCookieConfig 的解决办法
- java自学之路-----Servlet_过滤器Filter
- Spring 4.0 StandaloneMockMvcBuilder java.lang.NoClassDefFoundError: javax/servlet/SessionCookieConfi
- Servlet自学第27讲:Session与Cookie对比总结
- servlet自学——Cookie和Session
- PHP自学之路----会话技术(cookie session)
- java自学之路-----Servlet_监听器
- Spring 4.0 StandaloneMockMvcBuilder java.lang.NoClassDefFoundError: javax/servlet/SessionCookieConfig 问题解决
- Java.lang.NoClassDefFoundError: javax/servlet/SessionCookieConfig
- tomcat7 启动项目报错 java.lang.NoSuchMethodError: javax.servlet.ServletContext.getSessionCookieConfig()
- java之辨析Session Cookie Servletcontext
- 异常信息:java.lang.NoClassDefFoundError: javax/servlet/SessionCookieConfig
- java之辨析Session Cookie Servletcontext
- Servlet自学第26讲:禁用cookie后还能继续使用session的方法