session:由服务器创建,存在服务器上
Cookie:由服务器创建,存在客户端(本地电脑浏览器缓存)
Session的使用
1.客户端第一次访问Web服务器时,服务器为客户端创建一个会话,并产生唯一的SessionID。
2.服务器响应客户端,将SessionID回传给客户端。
2.客户端再次向Web服务器发出请求时,附带SessionID。服务器根据SessionID来唯一标识客户
HttpServletRequest创建HttpSession实例
方法名 | 说明 |
request.getSession() | 调用此方法时,容器会先检查客户端先前发送的请求是否建立过HTTP会话,如果没有,容器会创建一个新会话,并赋予一个唯一的会话ID;如果没有则容器会根据可会请求中的会话ID找到匹配的会话 |
request.getSession(boolean flag) | 此方法的flag用于指定是否有必要创建一个会话。调用时,如果客户端先前没有建立会话,则此方法返回null |
Session的常用方法
方法名 | 说明 |
public void setAttribute(String name,Object value) | 根据指定名称将对象保存至会话中 |
public Object getAttribute(String name) | 根据指定名称从会话中获取某个属性的值 |
public void removeAttribute(String name) | 从会话中移除指定名称的属性 |
public String getId() | 返回Session的ID。该ID由服务器创建,不会重复 |
public void isNew() | 判断当前会话是否是新建的会话 |
public void invalidate() | 使当前Session失效 |
public void setMaxInactiveInterval(int seconds) | 设置Session的有效时间,单位为秒(默认30min) |
public int getMaxInactiveInterval() | 返回Session的有效时间,单位为秒 |
Cookie的使用
方法 | 说明 |
Cookie(String name,String value) | 构造方法,用于创建一个Cookie实例,name用于指定Cookie的名称,value指定他的值 |
public String getName() | 用于获取Cookie的名称 |
public void setValue(String value) | 用于设置Cookie的值 |
public String getValue() | 用于获取Cookie的值 |
public void setMaxAge() | 用于设置Cookie在客户端浏览器上保存的有限时间的秒值 |
public int getMaxAge() | 用于获取Cookie在客户端浏览器上保存的有限时间的秒值 |
response.addCookie() | 向响应中添加cookie |
request.getCookies() | 获取Cookies数组 |
设置Cookies的有效期时
如果MaxAge设置为负数,表示该Cookie仅在本浏览器或者本窗口打开的子窗口有效。
为负数的Cookie是临时挂起的,不会被持久化(吧内存中的东西以文件的形式存储到本地),也不会写入到Cookie文件中
如果MaxAge设置为0时,则表示删除该Cookie。
失效的Cookie会被浏览器从Cookie文件内容中删除。
如果MaxAge设置为正数,表示该Cookie在指定秒数后失效。
Session与Cookie比较
从存储方式上比较
Cookie中只能保存字符串,不能存储java对象。
Session可以存取任何类型的数据
从有效期上比较
Cookie设置属性后可以实现永久保存的效果
Session无法实现信息永久有效保存的效果
从服务器负负担上比较
Cookie保存在客户端,不占用服务器资源
Session保存在服务器上。如果访问用户非常多,消耗大量的服务器内存,严重影响服务器性能
从浏览器支持上比较
Cookie需要客户端浏览器支持才可以使用
Session只能在本浏览器窗口及其子窗口有效
从安全性上比较
Cookie是服务器保存在客户端的一组数据,数据容易被窃取
Session的信息保存在服务器端,安全性上要比cookie高很多