cookie与session

来源:互联网 发布:abs c语言 编辑:程序博客网 时间:2024/06/05 03:06

a.什么是cookie
浏览器在访问服务器时,服务器将一些数据以set-cookie消息头的形式发送给浏览器。
浏览器会将这些数据保存起来。当浏览器再次访问服务器时,会将这些数据以cookie消息头的形式发送给服务器。通过这种方式,可以管理用户的状态。

b. 创建cookie
Cookie cookie = new Cookie(String name,String value);
response.addCookie(cookie);

c. 查询cookie
//如果没有cookie,则返回null。
Cookie[] cookies = request.getCookies();
String name = cookie.getName();
String value = cookie.getValue();

d. cookie保存时的编码问题
cookie的值只能是ascii字符,如果是中文,需要将中文转换成ascii字符形式。
可以使用URLEncoder.encode()方法和URLDecoder.decode()方法来进行这种转换。


e. 删除cookie
比如要删除一个name为"username"的cookie。
Cookie c = new Cookie("username","");
c.setMaxAge(0);
response.addCookie(c);



保存和查询Cookie流程
a. 浏览器向服务器发送addCookie请求 服务器中的AddCookieServlet创建了两个Cookie:cookie1和cookie2
b. 服务器端执行语句response.addCookie(cookie);
生成消息头“set-cookie”,并将两个Cookie以键值对的方式(“name=aaa”、“passwd=123”)存放在消息头中发送给浏览器
c. 浏览器将Cookie信息保存到本地内存中
d. 浏览器继续向服务器发送请求(带着消息头cookie) 服务器端的FindCookieServlet找到Cookie信息,并显示给浏览器



1什么是session
浏览器访问服务器时,服务器会创建一个session对象(该对象有一个唯一的id, 一般称为 sessionId)。服务器在缺省情况下,会将sessionId以cookie机制发送给浏览器。当浏览器再次访问服务器时,会将sessionId发送给服务器。服务器依据sessionId就可以找到对应的session对象。通过这种方式,就可以管理用户的状态。

2如何获得session对象
HttpSession session = request.getSession();


3常用的API:
1) 获得sessionId。 String session.getId();
2) 绑订数据 session.setAttribute(String name,Object obj); (存敏感数据)
服务器在对session进行持久化操作时,比如钝化、激活,会使用序列化协议, obj最好实现Serializable接口 Object session.getAttribute(String name);
3) 如果name对应的值不存在,返回null。
session.removeAttribute(String name);
4)调用session.invalidate();方法将立即删除Session对象

4.流程
1) 浏览器向服务器发请求,访问某一个Servlet或JSP 服务器先查看包含于请求的Cookie信息中(消息头是cookie)是否有sessionId(第一次访问时是没有的)
2) 浏览器第一次访问,服务器会创建一个Session对象,SomeServlet和该Session对象之间存在引用关系(即Servlet可以访问该Session对象了)
3) SomeServlet以Cookie的方式(消息头为set-cookie)将SessionId响应给浏览器
4) 浏览器将SessionId保存到内存中
5) 当浏览器再次访问服务器时,请求中的Cookie信息中包含sessionId, SomeServlet会根据sessionId找到对应的Session对象



原创粉丝点击