**web服务器跟踪用户状态的方法:
*Cookie技术
*Session技术
*重写URL
一、Cookie
*Cookie四大要点
*Name,value
*Path
*Age
*Domain
1.Name,Value
创建cookie时,Cookie c = new Cookie(key,value);
c.getName();可以拿到key
c.getValue();可以拿到value
key,value不能保存中文,如果要保存中文,必须编码.
*编码:String returnData = URLEncoder.encode(data, "utf-8");
*解码:String value = URLDecoder.decode(c.getValue(), "utf-8");
2.Path
* setPath(String url);默认值为当前servlet所在的目录.
* 例如:添加cookie的servlet路径为:http://localhost:8080/day10/abc/savaServlet
则cookie的路径为:http://localhost:8080/day10/abc
说明:所有url为http://localhost:8080/day10/abc 之下的servlet都可以访问到这个cookie.
例如,http://localhost:8080/day10/abc/servlet2
和http://localhost:8080/day10/abc/ccc/ddd/ss/servlet4 类似的都可以访问.
* 如果把path设置为http://loclhost/project/ 即到项目名,则此项目中所有servlet都可以访问这个cookie
cookie.serPath(request.getContextPath);
* 如果设置为 "/" 即http://localhost/ 则tomcat中运行的项目都可以读取到这个cookie.
此设置必须要与domain共同使用才有意义.
3.setMaxAge(默认值为-1,单位为秒)
* 如果大于0,表示在客户端硬盘上保存N秒.
* 如果小于0,表示不把cookie保存在硬盘上(删掉硬盘中的cookie),只存在内存中,当浏览器关闭时,cookie就会消失.
* 如果等于0, 表示删除客户机上的cookie(无论是在硬盘和内存,统统干掉!).
4.Domain(域)
www.sina.com
www.bbs.sina.com
www.news.sina.com
例如在www.sina.com中登录后,进入bbs或者news页面也应该是登录状态的.这就需要这两个页面也能访问到cookie才可以.
由于这些页面,每一个都是一个站点,要想共享cookie必须先设置path,即cookie.setPath("/");这样他们才都可以访问到,
但是,服务器中不属于sina的站点不应该访问到这个cookie,因此还需要设置域,即cookie.setDomain(".sina.com");
这样对使用了sina.com一级域名的所有二级域名都有效.
5.Cookie的其他一些细节
W3c规定浏览器只允许存放300个Cookie,一个站点最多可以存放20个Cookie,每个cookie的容量最大为4K.
由于各个浏览器厂商对Cookie的限制有所变化,所以保存多少个要看浏览器的支持。
目前一般支持保存50-80个Cookie.每个Cookie大小为8K.可以使用IE测试。
一、session
1.什么是会话?
用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程为一个会话.
2.session
session是把用户的数据写到用户独占的session中(服务器端),通过cookie关联.
*默认情况下,一个浏览器独占一个session对象.
*session由服务器创建,默认存在30分钟.
二、URL重写
IE禁用Cookie后的session处理
解决方法:URL重写(一般情况选择第二种)
1.response.encodeRedirectURL(java.lang.String url)
用于对sendRedirect方法后的url地址进行重写.
2.response.encodeURL(java.lang.String url)
用于对表单action和超链接的url地址进行重写.
*Cookie技术
*Session技术
*重写URL
一、Cookie
*Cookie四大要点
*Name,value
*Path
*Age
*Domain
1.Name,Value
创建cookie时,Cookie c = new Cookie(key,value);
c.getName();可以拿到key
c.getValue();可以拿到value
key,value不能保存中文,如果要保存中文,必须编码.
*编码:String returnData = URLEncoder.encode(data, "utf-8");
*解码:String value = URLDecoder.decode(c.getValue(), "utf-8");
2.Path
* setPath(String url);默认值为当前servlet所在的目录.
* 例如:添加cookie的servlet路径为:http://localhost:8080/day10/abc/savaServlet
则cookie的路径为:http://localhost:8080/day10/abc
说明:所有url为http://localhost:8080/day10/abc 之下的servlet都可以访问到这个cookie.
例如,http://localhost:8080/day10/abc/servlet2
和http://localhost:8080/day10/abc/ccc/ddd/ss/servlet4 类似的都可以访问.
* 如果把path设置为http://loclhost/project/ 即到项目名,则此项目中所有servlet都可以访问这个cookie
cookie.serPath(request.getContextPath);
* 如果设置为 "/" 即http://localhost/ 则tomcat中运行的项目都可以读取到这个cookie.
此设置必须要与domain共同使用才有意义.
3.setMaxAge(默认值为-1,单位为秒)
* 如果大于0,表示在客户端硬盘上保存N秒.
* 如果小于0,表示不把cookie保存在硬盘上(删掉硬盘中的cookie),只存在内存中,当浏览器关闭时,cookie就会消失.
* 如果等于0, 表示删除客户机上的cookie(无论是在硬盘和内存,统统干掉!).
4.Domain(域)
www.sina.com
www.bbs.sina.com
www.news.sina.com
例如在www.sina.com中登录后,进入bbs或者news页面也应该是登录状态的.这就需要这两个页面也能访问到cookie才可以.
由于这些页面,每一个都是一个站点,要想共享cookie必须先设置path,即cookie.setPath("/");这样他们才都可以访问到,
但是,服务器中不属于sina的站点不应该访问到这个cookie,因此还需要设置域,即cookie.setDomain(".sina.com");
这样对使用了sina.com一级域名的所有二级域名都有效.
5.Cookie的其他一些细节
W3c规定浏览器只允许存放300个Cookie,一个站点最多可以存放20个Cookie,每个cookie的容量最大为4K.
由于各个浏览器厂商对Cookie的限制有所变化,所以保存多少个要看浏览器的支持。
目前一般支持保存50-80个Cookie.每个Cookie大小为8K.可以使用IE测试。
一、session
1.什么是会话?
用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程为一个会话.
2.session
session是把用户的数据写到用户独占的session中(服务器端),通过cookie关联.
*默认情况下,一个浏览器独占一个session对象.
*session由服务器创建,默认存在30分钟.
二、URL重写
IE禁用Cookie后的session处理
解决方法:URL重写(一般情况选择第二种)
1.response.encodeRedirectURL(java.lang.String url)
用于对sendRedirect方法后的url地址进行重写.
2.response.encodeURL(java.lang.String url)
用于对表单action和超链接的url地址进行重写.