一,Cookie
1.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规范 |
2.Cookie生命周期
(1)、cookie的数据存在客户端,未设置有效期,则存储在计算机内存中,设置了有效期,则存储在硬盘中。
(2)、cookie较session安全性更低,可以通过解析本地的cookie文件进行cookie欺骗
(3)、若不设置过期时间,则表示这个cookie的生命期为浏览器会话期间,关闭浏览器窗口,cookie就消失。这种生命期为浏览器会话期的cookie被称为会话cookie。同样,cookie也可以设置有效期,设置了有效期的cookie不会随着浏览器的关闭而消失,而是到了有效期才会消失
(4),Cookie的内容主要包括:名字,值,过期时间,路径和域。路径与域一起构成cookie的作用范围。
(5),cookie不能跨浏览器,新开的窗口会重新创建新的cookie,但是子窗口不会重新创建cookie
二,Session
1.Session的常用方法
方法 | 描述 |
---|---|
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.Session生命周期
(1)、seesion中的数据是保存在服务器中
(2)、session可以保存任何数据类型
(3)、session的默认有效期是30min,不过也可以手动配置
因为session的数据是放在服务器中,当短时间大访问量时,过多的session数据会给服务器造成压力,但是session的有效时间可以在配种文件中定义,可以通过配置减少服务器压力 (时间以分钟为单位)
<session-config>
<session-timeout>10</session-timeout>
</session-config>
(4)、session的生命周期自第一次访问浏览器时创建,结束有两种方式
- 销毁:可以使用 request.getSession().invalidate();销毁session,session生命是周期结束
- 过期:当session存在时间超过有效期,自动销毁
三,Cookie和Session的区别
1、cookie数据存放在客户的浏览器上,session数据放在服务器上。
2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗
考虑到安全应当使用session。
3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用COOKIE。
4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。