您的位置:首页 > 编程语言 > Java开发

java自学之路-----Servlet_Cookie,Session

2014-11-18 20:43 405 查看
cookie:客户端技术,程序把每个用户的数据以cookie形式写给各自的浏览器,当浏览器再次访问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应用一个该对象)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java