servlet会话跟踪
什么是会话跟踪?
从用户进入一个网站浏览到退出这个网站或者关闭浏览器称为一次会话。会话跟踪是指在这个过程中浏览器与服务器的多次请求保持数据共享的状态的技术。
为什么需要会话跟踪技术?
http协议是无状态的协议,响应结束,服务器端不保存客户端的任何信息.
会话跟踪:
1. cookie:服务端写在客户端的文本文件
2.用户授权,session,使用session在用户登录成功后,存放用户的信息,保证只有登录的用户才可以访问我们得重要资源
在LoginServlet中
session.setAttribute(“item”,item);
在其他Servlet中 获取该数据
Object obj=session.getAttribute(“item”);
if(item==null){
跳转到登录页面
}
重要的jsp都放在WEB-INF下了,客户端无法直接访问
3. url重新,地址栏传参,在url的后以 ?名=值&名=值
4.隐藏域,使用 hidden控件,存放数据的主键值,用于修改的条件
cookie:
通过cookie保存在浏览器缓存。通过名值对保存在浏览器中 ,可以设置cookie的过期时间属性来指定cookie的有效期。当下次浏览器发出请求时,会检索其保存的cookie。应用于自动登录、记录浏览过的商品。同时由于只能保存在浏览器的文本中,容易泄露个人信息,有时用户会禁用掉cookie。
//创建Cookie
Cookie注意:
- 每一个项目,每一个浏览器都有自己的Cookie
- Cookie 只能存放简单的字符串
- 不管我们写不写Cookie,服务器都会自动构建一个Cookie 把session会话的id存放在cookie中
- 默认cookie是临时的,也就说 maxAge 为 -1
session:
通过session保存在服务器。通过sessionID传递浏览器与服务器之间与该会话相关的所有信息。当关闭浏览器的时候,会话对象也会被销毁,sessionID会消失。
session原理:
- 每一个浏览器,分配一个session,也就是说session和浏览器一一对应,因为session的id是以Cookie的方式发送个客户端,而Cookie默认是临时的,浏览器关闭 cookie失效
- session中的内容,存放在服务器端
- session是当前客户端访问服务器中jsp或servlet时由服务器创建的,我们使用获取
获取session的方法:
1.getSession()
2.getSession(boolean)
3.getSession()和getSession(true)效果一致,如果session不存在,自动创建一个新的session
4.getSession(false):如果session不存在,返回 null
注:session的有效期默认为1800秒
如何让session失效
- 手动调用invalidate() 强制session失效
- 关闭浏览器
- 让session超时
- 把session中的所有数据清除,session可以使用
session和cookie区别和关联
- 联系:session的id是通过cookie来存放和提交的
- 区别:
位置不同:
cookie:存放在客户端
session:存放在服务器中
数据不同:
cookie:存放的数据,只能是String类型的简单数据,4kb
session:可以存放各种对象
生命周期不同:
cookie默认是-1,表示临时的,可以设置很长
session默认是1800秒,设置-1表示永久,但是浏览器已关闭,失效
创建方式不同:
cookie 使我们成创建 通过 new 构建,使用response的addCookie方法添加到客户端
session 客户端第一次访问时,由容器创建
安全性:
cookie:不安去
session:安全的
url重写
通过URL重写地址传递参数。它可以把会话ID编码在URL中,即使浏览器禁用了cookie也可以实现会话跟踪。(url?名=值&名=值)
<a href=”${pageContext.request.contextPath}/PageServlet.do?pageIndex=2”>上一页</a>
注意 禁止在form表单的action中使用 url重写
<form action=”IndexServlet.do”>
隐藏域
就是表单控件中的一个在页面中不显示而在服务器中可以照样获取数据的控件hidden,通常用于在修改操作是存放数据对应的主键值,在页面中功能过多的情况下,通过隐藏域,设置具体操作的类型,可以进一步减少servlet类的数量