Javaweb学习之Session和Cookie

会话的概念:会话就是对某个web应用程序的一次整体访问的过程。

会话问题:

业务完成需多次请求,如购物车
无连接的Http协议是 无状态的,不能保存每个客户端私有信息
如何保存客户端私有信息?
会话跟踪:解决同一时刻不同客户端会话私有数据的保存
两种实现:
1、Session :服务器分配的保存客户端私有信息的一块内存空间;
机制---- 客户端向服务端发出首次请求,服务器为此客户端产生session对象,并将生成一sessionId,应答时返回到客户端,客户端保存此id。当同一个客户端向服务器发出新的请求时,要将上次得到的sessionId一同发出,服务器检查用户的sessionId,根据他取得对应session对象。
sessionId是session的唯一标识,服务器通过sessionId将客户端与session数据对应起来,session存储在服务器端
Session对应的类为javax.servlet.http.HttpSession,每个访问者对应一个session对象,所有该用户的状态信息都保存在这个Session对象中,Session对象是客户端第一次请求服务器时创建的,它是key-value属性,通过setAttribute(String key)和getAttribute(String key ,Object value)的方法读取客户状态信息。
Servlet里通过request.getSession()的方法获取该客户的Session,JSP里内置了Session的隐藏对象,,可以直接使用。

session常用方法

方法名

返回

定义

getId()

String

获得当前Session的SessionID

isNew()

boolean

判断Session是不是新创建的

getCreationTime()

long

获得当前Session创建的时间

getLastAccessedTime()

long

获得客户最后一次请求的时间

setMaxInactiveInterval(int interval)

void

设置Session最大请求间隔时间

getMaxInactiveInterval()

int

获得Session最大请求间隔时间

setAttribute(String key,Object value)

void

向Session空间中存储对象

getAttribute(String key)

Object

从Session中获取对应的对象

removeAttribute(String key)

void

从Session中删除对应的对象

getAttributeNames

Enumeration

返回session存储的key的集合

invalidate()

void

强制Session过期


设置缺省过期时间:
在tomcat中的web.xml文件中可以使用以下配置来控制session过期时间:
15
参数的单位为分钟,setMaxInactiveInterval(int s)单位为秒

2、Cookie
默认方式,Netscape发明。
ServletAPI规范要求使用方式。
它的运行机制对我们是透明的。
可以显示设置cookie
Java中把cookie封装成javax.servlet.http.Cookie类,服务器通过操作Cookie类对象对客户端Cookie进行操作,通过request.getCookie()获取客户端提交的所有Cookie(以Cookie[]数组形式返回),通过response.addCookie(Cookie cookie) 向客户端设置Cookie,Cookie对象使用key-value形式保存用户状态

Session与Cookie对比

比较内容

Session

Cookie

保存方式

数据内容保存在服务器端

数据内容保存在客户端

安全性

数据比较安全

数据相对不安全

生命周期

使用内存存放数据,当用户长时间未请求服务器或服务器重启,内容可能丢失

保存在客户端的内存或文件中,可以指定Cookie的生存周期

资源占用

占用服务器的内存

每次请求时发送Cookie内容,占用带宽

存放内容

可以存放各种数据类型的数据

只能存放字符串类型的数据


你可能感兴趣的:(Javaweb学习之Session和Cookie)