一. Session技术
Cookie的局限性:
1. 限制数据类型
2. 不能保存中文
3. Cookie容量比较小,只有4KB
如果要保存4KB以上数据,或者要保存中文的数据,就不能使用Cookie技术,只能使用Session
如果浏览器没有打开Cookie功能 Session就没有用!!!
Session 的特点:
会话数据保存在服务器上。(保存在服务器的内存中) temp文件
核心技术
HttpSession类型: 是服务器用于保存会话数据的方式
获取Session对象:
HttpSession getSession();
HttpSession getSeesion(boolean create);
设置Session对象:
void setMaxInactiveInterval(int interval); // 设置Session的有效时间
void invalidate(); //销毁Session
String getId(); //返回Session的ID号
保存会话数据到Session对象中:
void setAttribute(String name, Object obj); //设置Session保存会话数据,可以是一个Object对象
Object getAttribute(String name); //更加Session的ID获取数据
void removeAttribute(String name); //清除Session数据
Session的原理:
功能是让服务器更快的识别不同的访问者
前提:
在哪一个Session【域对象】中保存的数据,就必须从哪一个Session【域对象】拿出数据
服务器:Server1 浏览器:Browser1
Browser1:保存了一个Server1给他分配的唯一的标识号,用cookie来保存
服务器会创建一个Session
HttpSession session = request.getSession(); //保存浏览器Cookie信息中带有是SessionID,创建对应的
//Session对象
Browser1新窗口: 因为是同一个浏览器,所以这里也会带有之前服务器给分配的SessionID信息
服务器或根据浏览器的信息得到对应的Session
HttpSession session = request.getSession();
解读一下:HttpSession session = request.getSession();
1)如果是浏览器第一次访问服务器,就会创建一个新的Session对象,用来保存和这个浏览器的会话数据
并且生成一个唯一的sessionID,叫做 JSESSIONID
2)会被JSESSIONID作为Cookie的值发送给浏览器,保存
Cookie cookie = new Cookie("JSESSIONID", sessionID);
response.addCookie(cookie);
3)如果是第二次访问,浏览器是带有Cookie信息,在Cookie信息中有一个Cookie 叫做 JSESSIONID
这个JSESSIONID就会发送给服务器
4)服务器如果接受到了JSESSIONID信息,就会通过HttpSession session = request.getSession();得到
对应的Session对象,进行浏览器和服务器直接的会话数据传递和控制
【注意】
在Tomcat服务器中,Session 的名字是JSESSIONID,给浏览器保存的Cookie信息中,只有
Cookie名字是JSESSIONID的这个Cookie里面保存的才是服务器任务的SessionID
不同的服务器判断是否是一个SessionID内容的方式不一样,
在PHP中,浏览器Cookie名字为PHPSESSID这是Apache服务器认为的SessionID
网友评论