session称为会话,会话指一个终端用户与交互系统进行通讯的过程,比如从输入账户密码进入操作系统到退出操作系统就是一个会话过程。例如在浏览器登录淘宝后,在该浏览器打开多个淘宝页面都不需要再登录,因为都属于一次会话中。
方法名 | 描述 |
---|---|
setAttribute(key,val) | 设置键值对 |
getAttribute(key) | 通过键获取值 |
getId() | 获取session的id |
setMaxInactiveInterval(time) | 设置session的过期时间[单位:秒](tomcat中默认配置的过期时间是30分钟) |
removeAttribute(key) | 从session中移除指定的key |
session对象使用案例:实现页面访问权限控制
首先是一个登陆界面:
<html>
<head>
<title>登录title>
head>
<body>
<form action="control.jsp" method="post">
<input type="text" name="uname" placeholder="请输入用户名">
<input type="password" name="pwd" placeholder="请输入密码">
<input type="submit" value="登录">
form>
body>
html>
控制层jsp代码:
<%
//设置请求编码格式
request.setCharacterEncoding("utf-8");
//获取请求中表单的参数
String uname = request.getParameter("uname");
String pwd = request.getParameter("pwd");
//对用户名及密码进行验证(操作数据库)
if("admin".equals(uname) && "admin".equals(pwd)){
//将用户的用户名存储到本次会话中,作为登录成功的标识
session.setAttribute("uname",uname);
//登录成功用response跳转到个人中心页面
response.sendRedirect("person.jsp");
}else{
//通过session存储一个错误信息
session.setAttribute("errMsg","用户名或密码错误");
//回到登录页面,并提示错误信息
response.sendRedirect("login.jsp");
}
%>
登录成功时进入个人中心:
个人中心
<%
//通过获取会话中session对象的用户名参数,判断验证用户是否已经登录
Object object = session.getAttribute("uname");
if(object == null){//如果获取不到"uname"参数,则用户未登录,跳转到登录页面
response.sendRedirect("login.jsp");
return;
}
%>
个人中心
欢迎,<%=object%>
登陆失败时返回到登陆页面,并提示登陆失败的信息,因此要对登陆页面做些改动:
登录
<%
//声明一个显示错误信息的变量,初始化为空字符串
String errMsg = "";
//提取错误信息,返回值是Object类
Object object = session.getAttribute("errMsg");
if(object != null){ //判断如果是从登录失败后跳转过来的
errMsg = (String)object; //就把错误信息转为字符串类型后赋给errMsg变量
//移除session中的key,防止在本次会话进行时,即使已经成功登录了,再次打开登录页面还是会显示错误信息。(用户想要切换账户时)
session.removeAttribute("errMsg");
}
%>
<%=errMsg%>
效果:
首先尝试未在登录页面进行登录,就进入个人中心
回车后页面直接跳转到了登录页面,由于是 response重定向跳转,因此地址栏也会发生改变
输入用户名admin和密码admin,点击登录,进入个人中心
[
这时候在浏览器无论开几个页面进入个人中心,都不用再进行登录了。
再创建一个购物车页面,和个人中心一样实行页面访问权限控制,代码:
Title
<%
//首先需要先验证用户是否已经登录
Object object = session.getAttribute("uname");
if(object == null){//用户未登录,跳转到登录页面
response.sendRedirect("login.jsp");
return;
}
%>
我的购物车
和个人中心一样,只要在浏览器中打开登录页面并进行登陆过,就可以直接访问该页面了
session对象的会话效果一直执行到浏览器关闭,或者设置session的失效事件。
设置session失效
方法:session.setMaxInactiveInterval()。
代码演示:
<%
String uname = request.getParameter("uname");
String pwd = request.getParameter("pwd");
if("admin".equals(uname) && "admin".equals(pwd)){
session.setAttribute("uname",uname);
//在设置了session对象后,设置session的失效事件(单位:秒),参数5代表5秒后session失效
session.setMaxInactiveInterval(5);
response.sendRedirect("person.jsp");
}else{
session.setAttribute("errMsg","用户名或密码错误");
response.sendRedirect("login.jsp");
}
%>
以上代码设置了session对象在5秒后失效 。登录5秒后,再进入个人中心或购物车页面,将会因为获取不到session参数而直接跳转到登录页面。