会话:浏览器访问服务器端,发送屡次请求,接受屡次响应。直到有一方断开链接。会话结束。
解决问题:能够使用会话技术,在一次会话的屡次请求之间共享数据。
分类:
客户端会话技术 Cookie
服务器端会话技术 Session数组
客户端会话技术:Cookie 小饼干的意思
服务器端不须要管理,方便。可是不安全。
原理:
1.客户端第一次请求服务器端,服务器做出响应时,会发送set-cookie头,携带须要共享的数据
2.当客户端接受到这个响应,会将数据存储在客户端
3.当客户端再次请求服务器端时,会经过cookie请求头携带着存储的数据。
4.服务器接受带请求,会获取客户端携带的数据。
Java代码实现:
1.发送cookie
//1.建立Cookie对象。
Cookie c = new Cookie("name","zhangsan");
//2.经过response发送cookie
response.addCookie(c);
2.接收cookie
//1.获取全部cookie数组
Cookie[] cs = request.getCookies();
//2.遍历数组
if(cs != null){
for (Cookie c : cs) {
//获取cookie的名称
String name = c.getName();
//判断名称,获得目标cookie
if("name".equals(name)){
//获取值
String value = c.getValue();
System.out.println(name+":"+value);
}
}
}
Cookie的细节:
1.默认状况下,cookie保存在客户端浏览器内存中。
须要将数据持久化存储在客户端的硬盘上。
设置cookie的存活时间。setMaxAge(int s);
2.Cookie是不支持中文数据的。若是要想存储中文数据。须要转码。
URL编码
功能:记住用户名和密码浏览器
服务器端会话技术:Session 主菜的意思
服务器端须要管理数据,麻烦,可是安全。
原理:
1.客户端访问服务器端,在服务器端的一个对象(Session)中存储了数据
2.服务器给客户端做出响应时,会自动将session对象的id经过响应头 set-cookie:jsessionid=xxx 发送到客户端
3.客户端接受到响应,将头对应的值存储到客户端
4.客户端再次请求时,会携带着请求头 cookie:jsessionid=xxx.
5.服务器接受到请求,经过jsessionid的值,找到对应的session对象。就能够获取对象中存储的数据了。
Session技术依赖于cookie。
获取session
HttpSession session = request.getSession();
域对象:
setAttribute():
getAttribute():
removeAttribute():
session细节:
1.客户端关闭了,两次session同样吗?
不同。由于客户端浏览器内存释放了,jsessionid没了。
服务器关闭了,两次session同样吗?
不同。由于服务器内存释放了,session对象没了。
session的钝化:
当服务器正常关闭时,会将session对象写入到服务器的硬盘上。
session的活化:
当服务器正常启动时,会将session文件还原为session对象
2.session对象的销毁
1.session超时
<session-config>
<session-timeout>30</session-timeout>
</session-config>
2.invalidate():session销毁
3.服务器关闭。
3.session依赖于cookie,若是客户端禁用了cookie,那么session该咋办?
URL重写。安全
4.getSession方法的重载:
boolean:
true:默认值
经过id查找session,若是没找到,新建立一个
false:
经过id查找session,若是没找到,返回null
第一次建立一个新的对象服务器