1. Cookie
1.1 cookie定义
服务器发送给客户端(浏览器)的特殊信息
Cookie意为“甜饼”,是由W3C组织提出,最早由Netscape社区发展的一种机制。目前Cookie已经成为标准,所有的主流浏览器如IE、Netscape、Firefox、Opera等都支持Cookie。
1.2 原理和作用
1.2.1 Cookie的工作原理
由于HTTP是一种无状态的协议,服务器单从网络连接上无从知道客户身份。所以就给客户端们颁发一个通行证吧,每人一个,无论谁访问都必须携带自己通行证。这样服务器就能从通行证上确认客户身份。
1.2.2 cookie设置到发送到服务器经过四步
- 客户端发送一个http请求到服务器端
- 服务器端发送一个http响应到客户端,其中包含Set-Cookie头部
- 客户端发送一个http请求到服务器端,其中包含Cookie头部
- 服务器端发送一个http响应到客户端
1.3 cookie生命周期
- 如果不设置过期时间,表示这个cookie的生命周期为浏览器的会话时间
- 如果设置过期时间,浏览器会把cookie保存到硬盘上,关闭后再次打开浏览器,cookie依旧有效直到超过预定时间。另外,存在硬盘的cookie可以在不同的浏览器上共享。
1.4 常用方法
4.1 cookie类所有属性(javax.servlet.http.Cookie)
String name:该Cookie的名称。Cookie一旦创建,名称便不可更改。
Object value:该Cookie的值。如果值为Unicode字符,需要为字符编码。如果值为二进制数据,则需要使用BASE64编码。
int maxAge:该Cookie失效的时间,单位秒。如果为正数,则该Cookie在maxAge秒之后失效。如果为负数,该Cookie为临时Cookie,关闭浏览器即失效,浏览器也不会以任何形式保存该Cookie。如果为0,表示删除该Cookie。默认为–1。
boolean secure:该Cookie是否仅被使用安全协议传输。安全协议。安全协议有HTTPS,SSL等,在网络上传输数据之前先将数据加密。默认为false。
String path:该Cookie的使用路径。如果设置为“/sessionWeb/”,则只有contextPath为“/sessionWeb”的程序可以访问该Cookie。如果设置为“/”,则本域名下contextPath都可以访问该Cookie。注意最后一个字符必须为“/”。
String domain:可以访问该Cookie的域名。如果设置为“.google.com”,则所有以“google.com”结尾的域名都可以访问该Cookie。注意第一个字符必须为“.”。
String comment:该Cookie的用处说明。浏览器显示Cookie信息的时候显示该说明。
int version:该Cookie使用的版本号。0表示遵循Netscape的Cookie规范,1表示遵循W3C的RFC 2109规范。
1.4.2 cookie的用法
Cookie cookie = new Cookie("name","peter"); // 新建Cookie
cookie.setDomain(".agx.com"); // 设置域名
cookie.setPath("/"); // 设置路径
cookie.setMaxAge(Integer.MAX_VALUE); // 设置有效期为永久 c.setMaxAge(60);//60秒的意思
cookie.setSecure(true); // 设置安全属性
response.addCookie(cookie); // 输出到客户端
1.修改某个cookie,建同名的cookie覆盖。
2.删除某个cookie,建同名的cookie并将maxAge设置为0覆盖要删除的cookie。
注意:新建的Cookie除value、maxAge之外的所有属性需与原来的cookie相同才能覆盖成功。
输出当前页面所有的cookie
<script>document.write(document.cookie);</script>//JS输出cookie
1.5 cookie的应用
1.保存登录的用户名和密码
a.直接将用户名和密码保存到cookie中
b.密码加密后保存到Cookie中,下次访问时解密并与数据库比较。(较为安全)
c.把账号按照一定的规则加密后,连同账号一块保存到Cookie中。下次访问时只需要判断账号的加密规则是否正确即可。
2. Session
2.1 定义
Session是指一个终端用户与交互系统进行通信的时间间隔,通常指从注册进入系统到注销退出系统之间所经过的时间。
2.2 工作原理和工作流程
2.2.1 工作原理
如果说Cookie机制是通过检查客户身上的“通行证”来确定客户身份的话,那么Session机制就是通过检查服务器上的“客户明细表”来确认客户身份。Session相当于程序在服务器上建立的一份客户档案,客户来访的时候只需要查询客户档案表就可以了。
2.2.2 工作过程:
- 用户在第一次访问服务器就开始创建session,产生session对象
- 给session对象分配一个唯一标识sessionId,以sessionId为键,以session对象为值,封装成Map集合。
3.产生响应时,将sessionId以cookie方式发送给客户端,存放在客户端浏览器的缓存中
4.当客户端再次请求服务器,会将sessionId以cookie请求头的方式发送给服务器,服务器得到sessionId后,从Map集合中,得到session对象,从而跟踪状态。
2.3 用法
2.3.1 session的属性(javax.servlet.http.HttpSession)
void setAttribute(String attribute, Object value):设置Session属性。value参数可以为任何Java Object。通常为Java Bean。value信息不宜过大
String getAttribute(String attribute):返回Session属性
Enumeration getAttributeNames():返回Session中存在的属性名
void removeAttribute(String attribute):移除Session属性
String getId():返回Session的ID。该ID由服务器自动创建,不会重复
long getCreationTime():返回Session的创建日期。返回类型为long,常被转化为Date类型,例如:Date createTime = new Date(session.get CreationTime())
long getLastAccessedTime():返回Session的最后活跃时间。返回类型为long int
getMaxInactiveInterval():返回Session的超时时间。单位为秒。超过该时间没有访问,服务器认为该Session失效
void setMaxInactiveInterval(int second):设置Session的超时时间。单位为秒
void putValue(String attribute, Object value):不推荐的方法。已经被**setAttribute(String attribute, Object Value)替代
Object getValue(String attribute):不被推荐的方法。已经被getAttribute(String attr)替代
boolean isNew():返回该Session是否是新创建的 void invalidate():使该Session失效
2.3.2 Session的用法
HttpSession session = request.getSession(); // 获取Session对象
session.setAttribute("loginTime", new Date()); // 设置Session中的属性
out.println("登录时间为:" +(Date)session.getAttribute("loginTime")); // 获取Session属性
2.4 Session的应用
- 判断用户是否登录。登录界面验证用户登录信息,如果登录正确,就把用户信息以及登录时间保存进Session,然后转到欢迎页面welcome.jsp。welcome.jsp中从Session中获取信息,并将用户资料显示出来。
2.购物车功能。
注意:为防止内存溢出,服务器会把长时间内没有活跃的Session从内存删除。这个时间就是Session的超时时间。如果超过了超时时间没访问过服务器,Session就自动失效了。Session的超时时间为maxInactiveInterval属性
3.cookie与session的区别
- cookie通过在客户端记录信息确定用户身份,session通过在服务器端记录用户信息确定用户身份。
- cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,考虑到安全应当使用session;
- session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能。考虑到减轻服务器性能方面,应当使用COOKIE;
- 单个cookie在客户端的限制是3K,就是说一个站点在客户端存放的COOKIE不能超过3K;
网友评论