WEB中的会话技术:Cookie及Session

来源:互联网 发布:销售清单软件 编辑:程序博客网 时间:2024/04/26 04:39

会话技术

会话的概念:
日常生活来讲.会话就是两个人聊天. 聊天的前提,聊天双方需要有记忆力. 在聊的过程中,都是
基于之前聊的状态,继续往下聊.
我们javaweb中,浏览器和服务器也可以看作是双方在聊天(请求,响应). 浏览器服务器双方也需要

有"记忆力",保存之前的聊天状态.服务器和浏览器才可以完成会话.


会话的范围:

两个从打招呼到两人互相道别.是一次会话.

打开网站,完成我们想做的需求,到关闭浏览器.是一次会话.


Cookie: 让浏览器能够记录信息.
Session:让服务器端能够记录信息.

//--------------------------------------------------------------------------------------------------------------------------------------------


cookie 浏览器端记录信息的技术

基本操作
创建cookid
Cookie cookie = new Cookie(String key,String value);
发送cookie
response.addCookie(cookie);
获得cookie
Cookie cookie = null;
  
Cookie[] cookies =  request.getCookies();

if(cookies!=null && cookies.length>0){
for(Cookie c : cookies ){
if(c.getName().equals("remember")){

cookie = c;}}}


cookie的细节
1>关于浏览器记住多久.
默认情况:
浏览器会在关闭的时候删除cookie(会话结束时)
手动设置:
c.setMaxAge(60*60*24*7*2);//告诉浏览器保存2周
c.setMaxAge(-1);// -1代表 在会话结束时删除cookie(默认情况)
c.setMaxAge(0);// 通常用于删除已经存在的cookie.使用一个寿命为0的cookie,覆盖要删除的cookie
2>浏览器在什么情况下发送cookie(cookie的路径问题)
*cookie的默认路径就是 发送cookie的动态资源所在的上一级路径.
*如果 cookie路径是"/day10-cookie", 主机(域)是:localhost . 那么浏览器在访问cookie路径的所有子路径时会携带cookie.
http:/localhost:8080/day10-cookie/BServlet会发送
http:/localhost:8080/day10-cookie/ABC/BCD/CServlet会发送
http:/localhost:8080/day12/AServlet不会发送
http:/www.baidu.com/day10-cookie/BServlet不会发送
3>Cookie路径的设置
默认情况:
发送Cookie的资源所在路径.  
例如:  http:/localhost:8080/day9-cookie/CServlet  =>  /day9-cookie
手动设置:
c.setPath("/day09-cookie/ABC");
4>cookie的主机(域)设置 (了解)
默认情况:
发送Cookie的资源所在主机.
手动设置:
//自己当前是什么主机,你就只能设置为什么主机,或者主机名的一部分
//假设自己的主机是www.baidu.com那么可以如下设置:
c.setDomain(".baidu.com");
5> cookie删除的问题
删除cookie原理就是 使用一个寿命为0的cookie 覆盖需要删除的cookie.
如何覆盖cookie.?
需要 路径,键,主机 一致,即可覆盖.

6> 使用cookie记录中文键值对问题.
为什么不能直接使用中文?
因为http协议中,除正文部分都不得使用Latin码表以外的其他码表.
所以不管是cookie还是之前的Cotent-disposition.都不能直接使用中文.

汤姆 => %E3%E5%C2

1.使用 URLEncoder 对中文进行url编码

2.在获取cookie时,使用URLDecoder进行解码.

//-------------------------------------------------------------------------------------------------------------------------------------------------

Session 服务器段记录信息的技术


操作:
我们只需要掌握原理.和 学会如何获得 session即可.

获得==> request.getSession();
操作:
getAttribute();
setAttribute();
removeAttribute();
getAttributeNames();


session的细节

1> session能在服务器端保存多久?
1.   <session-config>
<session-timeout>30</session-timeout>
</session-config>
在tomcat/conf/web.xml 有如上配置. 该配置决定了session对象的有效存活时间为30分钟.

2.     在我们项目的web.xml中, 也可以加上如上配置.
区别就是影响的范围不同.在项目中配只影响当前项目.
3.(了解). 在session对象中,还有如下方法. 该方法也是控制session对象 的有效存活时间的,单位是秒.   范围是只影响调用该方法的某个session.
void setMaxInactiveInterval(int interval)   

2>session的范围问题.
1>浏览器第一次访问服务器,服务器创建session对象.会话开始.
2>*浏览器关闭,保存sessionID的cookie丢失. 会话结束.(session还在服务器中,等死)
  *session过期
 *手动销毁session


3>session中的其他方法.
//其他操作
System.out.println("session.isNew()"+session.isNew());// 判断session是否 是新的.
System.out.println("session.getCreationTime()"+new Date(session.getCreationTime()));//获得session的创建时间
System.out.println("session.getId()"+session.getId());//获得session的id
System.out.println("session.getLastAccessedTime()"+new Date(session.getLastAccessedTime()));//获得最后一次的访问时间
System.out.println("session.getMaxInactiveInterval()"+session.getMaxInactiveInterval());// 获得session的最大有效时间
session.setMaxInactiveInterval(60);//设置session的最大有效时间为60秒
session.invalidate();//需要记住: 立即让session销毁.

0 0
原创粉丝点击