什么是会话跟踪技术:
类似于客户端与服务器的即时沟通桥梁.
打开浏览器访问web服务器的资源时,会话就此建立,其中无论哪一方断开,会话都会结束,反之持续建立,
在会话期间双方可以进行多次请求和响应,这整个过程叫做会话
会话跟踪技术的作用:
在识别浏览器建立会话后,通多多次的请求实现数据共享
为什么现在浏览器和服务器不支持数据共享呢?
浏览器和服务器之间使用的是HTTP请求来进行数据传输,因为http协议是无状态的,无状态的目的是为了让每次请求之间相互独立,互不影响,但是请求与请求之间独立后,就无法实现多次请求之间的数据共享
客户端会话跟踪技术:==Cookie==
服务端会话跟踪技术:==Session==
区别:==Cookie是存储在浏览器端而Session是存储在服务器端==
Cookie如何实现?
创建Cookie对象 : Cookie cookie = new Cookie("key","value");
发送Cookie到客户端 : response.addCookie(cookie);
获取客户端携带的所有Cookie : Cookie[] cookies = request.getCookies();
for遍历数组
获取数组中每个Cookie对象的值:cookie.getName()和cookie.getValue()
如何将Cookie持久化存储?
设置Cookie存活时间 : setMaxAge(int seconds)
参数 正数:写在硬盘,到时间自动删除 负数:在内存中,浏览器关闭自动删除 零:直接删除
例:setMaxAge(60*60*24*7) //七天自动删除
Cookie如何储存中文?
思路:对中文进行URL编码,输出前进行解码
value = URLEncoder.encode(value, "UTF-8"); //对中文进行URL编码
value = URLDecoder.decode(value,"UTF-8"); // 解码成中文
Session如何实现?
获取session : HttpSession session = request.getSession();
提供的功能:
存储数据到 session 域中: void setAttribute(String name, Object o)
根据 key,获取值: Object getAttribute(String name)
根据 key,删除该键值对: void removeAttribute(String name)
Session的一些注意点:
钝化:在服务器正常关闭后,Tomcat会自动将Session数据写入硬盘的文件中
活化:再次启动服务器后,从文件中加载数据到Session中
session数据存储在服务端,服务器重启后,session数据会被保存
浏览器被关闭启动后,重新建立的连接就已经是一个全新的会话,获取的session数据也是一个新的对象
session的数据要想共享,浏览器不能关闭,所以session数据不能长期保存数据
cookie是存储在客户端,是可以长期保存
session的销毁会有两种方式:
1.默认情况下,无操作,30分钟自动销毁(可以修改)
可以在web.xml中配置实现:
<session-config>
<session-timeout>100</session-timeout>
</session-config>
- 在类中添加session销毁的方法
session.invalidate();
Cookie和Session的区别是什么?
- 存储位置:Cookie 是将数据存储在客户端,Session 将数据存储在服务端
- 安全性:Cookie不安全,Session安全
- 数据大小:Cookie最大3KB,Session无大小限制
- 存储时间:Cookie可以通过setMaxAge()长期存储,Session默认30分钟
- 服务器性能:Cookie不占服务器资源,Session占用服务器资源
Cookie和Session的应用场景分别是什么?
- 购物车:使用Cookie来存储
- 以登录用户的名称展示:使用Session来存储
- 记住我功能:使用Cookie来存储
- 验证码:使用session来存储
结论:
Cookie是用来保证用户在未登录情况下的身份识别
Session是用来保存用户登录后的数据