一、cookie
- 会话的基本概念: 指用户开一个浏览器,访问一个网站,只要不关闭该浏览器,不管该用户点击多少个超链接,访问多少资源,直到用户关闭浏览器,整个这个过程我们称为一次会话。
- cookie原理图:
我们可以把cookie想象成一张表比如这样:
注意一个cookie的名字只能对应一个值,如果重名就会替换存在的cookie值.
3 . cookie的小结:
- cookie 是在服务端创建
- cookie 是保存在浏览器这端
- cookie 的生命周期可以通过
cookie.setMaxAge(2000);
设置,如果不设置setMaxAge则该cookie当浏览器关闭时,就消亡。 - cookie 可以被多个浏览器共享。
4 . cookie存放中文怎么处理
存放:
String val=java.net.URLEncoder.encode("顺平","utf-8");
Cookie cookie=new Cookie("name",val);
取出:
String val=java.net.URLDecoder.decode(cookie.getValue(), "utf-8");
out.println("name ="+val);
5 . 一个小的cookie应用的例子:
保存上次登录时间:
public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
//先获取cookie
// 假设我们 保存上次登录时间的cookie "lasttime" "2011-11-11 12:12:12";
// 这里我们要考虑一个情况: 用户第一次登录 '您是第一次登录..'
Cookie []cookies=request.getCookies();
boolean b=false;//假设没有lasttime cookie
if(cookies!=null){ //保证有cookie,取遍历
for(Cookie cookie: cookies){
//取出名
String name=cookie.getName();
if("lasttime".equals(name)){
//显示
out.println("您上次登录时间是 "+cookie.getValue());
//更新时间
//把当前日期保存cookie
SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String nowTime=simpleDateFormat.format(new java.util.Date());
Cookie mycookie=new Cookie("lasttime",nowTime);
mycookie.setMaxAge(7*3600*24);//保存一周
response.addCookie(mycookie);
b=true;
break;
}
}
}
if(!b){
//没有找到
out.println("您是第一次登录..");
//把当前日期保存cookie
SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String nowTime=simpleDateFormat.format(new java.util.Date());
Cookie cookie=new Cookie("lasttime",nowTime);
cookie.setMaxAge(7*3600*24);//保存一周
response.addCookie(cookie);
}
}
二、session
1 . session工作原理图:
2 . 为什么服务器能够为不同的浏览器提供不同session?
因为每个浏览器去访问web站点的时候,如果发出的http请求头没有带JSESSIONID头就会自动给你创建一个并返回
由此也可以看出session是通过cookie来实现的
3 . session小结:
- session是存在服务器的内存中
- 一个用户浏览器,独享一个session域对象
- session中的属性的默认生命周期是30min ,你可以通过 web.xml来修改
- session中可以存放多个属性
- session 可以存放对象如果 session.setAttribute(“name”,val) , 如果名字重复,则会替换该属性.
4 . 三种设置session生命周期的方法:
(1)一个地方是 tomcat/conf/web.xml
<session-config>
<session-timeout>30</session-timeout>//表示30分钟的意思
</session-config>
对所有的web应用生效
(2)另外一个地方,就是在单个web应用的下去修改 web.xml
<session-config>
<session-timeout>30</session-timeout>//表示30分钟的意思
</session-config>
如果发生冲突,则以自己的web应用优先级高
(3)session.setMaxInactiveinterval(60)如果六十秒内没有访问该session则该session失效