什么是Session?
服务器端维护用户状态的一种状态管理技术。
浏览器访问服务器时,服务器会创建一个对象(session对象),同时,还会生成一个标识该对象的唯一的字符串(sessionId),服务器在默认情况下,使用cookie机制将sessionId发送给浏览器。浏览器下次访问服务器时,会将sessionId携带给服务器,服务器会使用sessionId查找对应的session对象。
通过这种方式,来维护用户的状态。负责保存“同一客户端一次会话过程中”的一些信息。
Session创建
HttpSession request.getSession(boolean flag);
- flag为 true:服务器查看客户端请求中是否有sessionId,如果没有,则创建一个session对象,返回该对象的引用。如果有,要查看对应的session对象是否存在,如果存在,则返回该对象的引用,若不存在,则创建一个session对象。
- flag为 false:服务器查看请求中是否有sessionId, 如果没有,返回null。如果有,要查看对应的session对象是否存在,如果存在,则返回该对象的引用,若不存在,返回null。
- getSession()中没有参数等价于getSession(true)
示例:
HttpSesssion sess1 = request.getSession();
HttpSesssion sess2 = request.getSession(false);
注意:jsp页面默认情况下,它是<%@ page session=“true”%>的,即默认情况下,访问jsp,一定会得到session对象。
常用方法
String session.getId()
获取SessionId
session.setAttribute(String name,Object obj);
绑定某个对象
Object session.getAttribute(String name)
显示某个用户的访问次数,如果找不到返回null
session.setMaxInActiveInterval(int seconds)
设置最大不活动时间
设置默认超时限制
针对整个服务器或者某个特定的应用设置超时限制:
web.xml
<session-config>
<session-timeout>30</session-timeout>
</session-config>
Session验证
登录成功以后,向session中写入数据: session.setAttribute(数据);
在需要受保护的页面添加如下代码:
session.getAttribute(数据);
如果为空,说明用户登录失败,不能访问,一般会重定向到登录页面。
<%@include file=""%>
jsp引擎在将.jsp文件转换成.java文件时,将对应的文件的内容插入到指令所在的位置。
验证码
使用Servlet生成图片
使用java.awt.*的相应类生成一个图像 image= ;
压缩图像成jpg格式:
response.setContentType("image/jpeg");
输出:
OutputStream out = response.getOutputStream();
(2)比较session中存放的checkcode与客户端传送给来的checkcode
用户禁止cookie,如何实现sessionId的跟踪
用户禁止cookie,还可以使用session机制:可以使用URL重写机制来解决。
(1)什么是URL重写:通过修改URL地址,在其后添加sessionId,来实现sessionId的跟踪。
(2)URL重写注意事项:即在访问某个需要session机制支持的组件时,不要直接在浏览器地址栏输入地址,而通过服务器生成的URL地址来访问。
(3)方法
a,response.encodeURL(url);// 在链接、表单提交时使用
b,response.encodeRedirectURL(url);//在重定向时使用
session机制的优缺点
-
优点:相对于cookie机制,session机制安全。存放的数据可以是对象,存放的数据量也更大。
-
缺点:所有的数据都存放在服务器端,服务器的压力比较大。一般会采用激活、钝化机制,将session中的数据临时保存到文件或者数据库。