Cookie and Session
2012-05-01 20:20
169 查看
Cookie and Session
1、cookie技术
a, cookie是什么?
浏览器访问服务器时,服务器发送给浏览器
少量的数据,这些数据以set-cookie消息头的
方式发送给浏览器。浏览器会将set-cookie消
息头设置的内容保存下来(内存或者是硬盘)。
当浏览器再次访问服务器时,会将之前保存的数
据以cookie消息头的方式发送给服务器,通过这
种机制,可以将浏览器与服务器之间交互的数据
保存下来。
b, 创建cookie
Cookie cookie = new Cookie(String name, String value);
cookie.setMaxAge(int seconds);
response.addCookie(cookie);
c,查询cookie
//如果没有cookie,会返回null
Cookie[] request.getCookies();
String cookie.getName();
String cookie.getValue();
d,编码问题
cookie的值只能是ascii字符,如果出现了非
ascii字符(比如中文),需要将中文转换成
对应的ascii字符表示。
可以使用URLEncoder.encode方法或者
BASE64Encoder.encode方法来实现转换。
要注意:
在查询时,要使用对应的方法来解码。
e, 生存时间
cookie.setMaxAge(int seconds)
单位是秒。
seconds <0: 保存在内存里(默认值),只有
当浏览器关闭,cookie才会删除。
seconds > 0: 以文件的方式保存在硬盘上,
超过这个时间,浏览器会删除cookie。
seconds = 0: 立即删除cookie。
如果要删除一个名叫"username"的cookie:
Cookie cookie = new Cookie("username","");
cookie.setMaxAge(0);
response.addCookie(cookie);
f, 路径问题
浏览器在访问服务器的某个路径时,会
先比较cookie的路径与服务器的路径,只有
符合条件的cookie才会发送给服务器。
cookie如果没有调用setPath方法,则会
有一个默认的路径,这个默认的路径是
创建该cookie的组件的路径(当前路径)。
比如: /web06_3/jsp01/addCookie.jsp
创建了某个cookie,则该cookie的路径是:
/web06_3/jsp01
浏览器会比较cookie的路径与要访问的组件
的路径,只有当要访问的组件的路径是cookie
的路径或者其子路径时,浏览器才会发送该
cookie组服务器。
//设置cookie的路径
cookie.setPath(String str);
比如:
cookie.setPath("/web06_3");这样设置的
作用是,该组件生成的cookie,可以被这个应用
下所有的其它组件访问到。
如果写为cookie.setPath("/"),那么该组件生
成的cookie,可以被所有应用所有的其它组件访问到
练习:
写一个Find_AddCookieServlet,该servlet
先查询有没有一个名叫 userProfile的cookie,如果有,则
显示该cookie的值,如果没有,则创建该cookie。
new Cookie("userProfile","abc")
g, cookie的限制
cookie可以被禁止。
cookie的大小有限制(大约4k左右,跟
浏览器有关系),数量也有限制,浏览器
在本地大约能保存300个左右的cookie。
cookie不安全
cookie的值只能是字符串
2、session技术
(1)什么是session?
浏览器访问服务器时,服务器会创建一个
对象(该对象称为session对象,该对象有一个唯一
的id号,称为sessionId),服务器在默认情况下,
会将这个sessionId以set-cookie消息头的方式
发送给浏览器(即使用cookie机制),浏览器会将
sessionId保存到内存里。当浏览器再次访问服务
器时,会将sessionId发送给服务器。服务器依据
sessionId就可以找到之前创建的session对象。
(2) 如何获得一个session对象?
a, HttpSession session =
request.getSession(boolean flag);
当flag为true:
服务器会检查请求中是否包含sessionId,
如果没有,服务器会创建一个session对象;
如果有,服务器依据sessionId去查找session
对象,如果找到了,则返回,找不到,创建
一个新的session对象。
当flag为false:
服务器会检查请求中是否包含sessionId,
如果没有,返回null;
如果有,服务器依据sessionId去查找session
对象,如果找到了,则返回,找不到,返回
null。
b,HttpSession session =
request.getSession();
该方法完全等价与request.getSession(true)。
(3) session的常用方法:
String session.getId(); //返回sessionId。
session.setAttribute(String name,
Object obj);
//name对应的值不存在,返回null。
Object session.getAttribute(String name);
session.removeAttribute(String name);
(4)session的超时
服务器会将空闲时间过长的session对象
删除掉,称之为session超时。
服务器会有一个缺省的超时限制(一般是
30分钟),这个缺省时间可以修改。
比如tomcat可以修改 conf/web.xml
<session-config>
<session-timeout>30</session-timeout>
</session-config>
该修改会影响到所有部署在这个服务器上的
应用,一般不要修改。
可以对某个应用,在web.xml文件中,添加
<session-config>
<session-timeout>30</session-timeout>
</session-config>
可以调用session.setMaxInactiveInterval(int
seconds)设置超时限制。
(5) session的删除
session.invalidate();
案例:
session验证
step1 在登录成功之后,向session对象里
绑订数据:
session.setAttribute("user",user);
step2 对于需要保护的资源(即必须要登录之
后才能访问的资源),添加验证代码:
Object obj = session.getAttribute("user");
if(obj == null){
//没有登录
response.sendRedirect("login.jsp");
}else{
//正常访问
}
1、cookie技术
a, cookie是什么?
浏览器访问服务器时,服务器发送给浏览器
少量的数据,这些数据以set-cookie消息头的
方式发送给浏览器。浏览器会将set-cookie消
息头设置的内容保存下来(内存或者是硬盘)。
当浏览器再次访问服务器时,会将之前保存的数
据以cookie消息头的方式发送给服务器,通过这
种机制,可以将浏览器与服务器之间交互的数据
保存下来。
b, 创建cookie
Cookie cookie = new Cookie(String name, String value);
cookie.setMaxAge(int seconds);
response.addCookie(cookie);
c,查询cookie
//如果没有cookie,会返回null
Cookie[] request.getCookies();
String cookie.getName();
String cookie.getValue();
d,编码问题
cookie的值只能是ascii字符,如果出现了非
ascii字符(比如中文),需要将中文转换成
对应的ascii字符表示。
可以使用URLEncoder.encode方法或者
BASE64Encoder.encode方法来实现转换。
要注意:
在查询时,要使用对应的方法来解码。
e, 生存时间
cookie.setMaxAge(int seconds)
单位是秒。
seconds <0: 保存在内存里(默认值),只有
当浏览器关闭,cookie才会删除。
seconds > 0: 以文件的方式保存在硬盘上,
超过这个时间,浏览器会删除cookie。
seconds = 0: 立即删除cookie。
如果要删除一个名叫"username"的cookie:
Cookie cookie = new Cookie("username","");
cookie.setMaxAge(0);
response.addCookie(cookie);
f, 路径问题
浏览器在访问服务器的某个路径时,会
先比较cookie的路径与服务器的路径,只有
符合条件的cookie才会发送给服务器。
cookie如果没有调用setPath方法,则会
有一个默认的路径,这个默认的路径是
创建该cookie的组件的路径(当前路径)。
比如: /web06_3/jsp01/addCookie.jsp
创建了某个cookie,则该cookie的路径是:
/web06_3/jsp01
浏览器会比较cookie的路径与要访问的组件
的路径,只有当要访问的组件的路径是cookie
的路径或者其子路径时,浏览器才会发送该
cookie组服务器。
//设置cookie的路径
cookie.setPath(String str);
比如:
cookie.setPath("/web06_3");这样设置的
作用是,该组件生成的cookie,可以被这个应用
下所有的其它组件访问到。
如果写为cookie.setPath("/"),那么该组件生
成的cookie,可以被所有应用所有的其它组件访问到
练习:
写一个Find_AddCookieServlet,该servlet
先查询有没有一个名叫 userProfile的cookie,如果有,则
显示该cookie的值,如果没有,则创建该cookie。
new Cookie("userProfile","abc")
g, cookie的限制
cookie可以被禁止。
cookie的大小有限制(大约4k左右,跟
浏览器有关系),数量也有限制,浏览器
在本地大约能保存300个左右的cookie。
cookie不安全
cookie的值只能是字符串
2、session技术
(1)什么是session?
浏览器访问服务器时,服务器会创建一个
对象(该对象称为session对象,该对象有一个唯一
的id号,称为sessionId),服务器在默认情况下,
会将这个sessionId以set-cookie消息头的方式
发送给浏览器(即使用cookie机制),浏览器会将
sessionId保存到内存里。当浏览器再次访问服务
器时,会将sessionId发送给服务器。服务器依据
sessionId就可以找到之前创建的session对象。
(2) 如何获得一个session对象?
a, HttpSession session =
request.getSession(boolean flag);
当flag为true:
服务器会检查请求中是否包含sessionId,
如果没有,服务器会创建一个session对象;
如果有,服务器依据sessionId去查找session
对象,如果找到了,则返回,找不到,创建
一个新的session对象。
当flag为false:
服务器会检查请求中是否包含sessionId,
如果没有,返回null;
如果有,服务器依据sessionId去查找session
对象,如果找到了,则返回,找不到,返回
null。
b,HttpSession session =
request.getSession();
该方法完全等价与request.getSession(true)。
(3) session的常用方法:
String session.getId(); //返回sessionId。
session.setAttribute(String name,
Object obj);
//name对应的值不存在,返回null。
Object session.getAttribute(String name);
session.removeAttribute(String name);
(4)session的超时
服务器会将空闲时间过长的session对象
删除掉,称之为session超时。
服务器会有一个缺省的超时限制(一般是
30分钟),这个缺省时间可以修改。
比如tomcat可以修改 conf/web.xml
<session-config>
<session-timeout>30</session-timeout>
</session-config>
该修改会影响到所有部署在这个服务器上的
应用,一般不要修改。
可以对某个应用,在web.xml文件中,添加
<session-config>
<session-timeout>30</session-timeout>
</session-config>
可以调用session.setMaxInactiveInterval(int
seconds)设置超时限制。
(5) session的删除
session.invalidate();
案例:
session验证
step1 在登录成功之后,向session对象里
绑订数据:
session.setAttribute("user",user);
step2 对于需要保护的资源(即必须要登录之
后才能访问的资源),添加验证代码:
Object obj = session.getAttribute("user");
if(obj == null){
//没有登录
response.sendRedirect("login.jsp");
}else{
//正常访问
}
相关文章推荐
- Cookie Theft and Session Hijacking
- PHP7.27: Cookie and Session
- Java Session and Cookie
- Django—Cookie and Session
- Session and Cookie
- session and cookie
- session、cookie and cache
- Network | Cookie and Session
- HTTP协议详解 Author :Jeffrey () session and cookie
- cookie, sessionStorage and localStorage 之间的区别 与定义; 应用;
- 转:java web中的cookie and session
- Cookie and Session(上)
- Session and cookie
- Cookie and Session
- session and cookie
- MVC、控件、一般处理程序中的session and cookie
- sessionid and cookie
- What is the difference between a Session and a Cookie?
- difference between Cookie and Session