会话技术 cookie and session
会话技术:
会话:浏览器访问服务器端,发送多次请求,接受多次响应。直到有一方断开连接。会话结束。
解决问题:可以使用会话技术,在一次会话的多次请求之间共享数据。
分类:
客户端会话技术 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
第一次创建一个新的对象