session
每个用户的一次会话就是session。
session对象是客户端与服务器的一次会话,在Web中session表示从进入网站到关闭网站的这段时间。当客户访问一个服务器时,客户会在服务器上的几个页面互相切换,这时服务器时通过session对象来知道这是同一个用户
一、session几个常用例子
session通常的用处:
- 保存登用户信息
- 将某些数据存储在session中,这样用户可以访问这个网站的多个页面
- 防止用户登入到某个页面中(重)
- 网上商城中的购物车
二、基本方法
<!--session的唯一标识符 -->
<%= session.getId() %>
<!-- session的创建时间-->
<%=
new java.util.Date(session.getCreationTime()).toString()
%>
<!--session的最后访问时间-->
<%= new java.util.Date(session.getLastAccessedTime()).toString()
%>
<!--session的有效时间-->
<%= session.getMaxInactiveInterval()
%>
<!--设置session的有效时间-->
<%
session.setMaxInactiveInterval(10);//时间为10秒过期
%>
<!--session的创建时间-->
<%
//设置时间格式
SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
//实例话时间对象
Date d=new Date(session.getCreationTime());
%>
//format()格式化
session创建时间:<%=sdf.format(d) %>
<!--获取session中所有属性-->
<%
String [] names=session.getValueNames();
for(int i=0;i<names.length;i++)
{
out.println(names[i]+" ");
}
%>
三、设置销毁时间
在项目里的WEB-INF中的web-xml中设置
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<!-- 设置session销毁时间(分钟) -->
<session-config>
<session-timeout>10</session-timeout>
</session-config>
</web-app>
四、session的生命周期
(1)创建:
当客户端第一次访问某个jsp或者servlet时候,服务器会为当前会话创建一个session ID,每次客户端向服务器端发送请求时,都会将此session ID携带过去,服务端会对此session ID进行校验。
(2)活动:
某次会话当中通过超链接打开的新页面属于同一次会话,或者只要当前会话页面没有关闭,重新打开新的浏览器窗口访问同一项目资源时,还是属于同一次会话。除非本次会话的所有页面都关闭后在重新访问某个jsp或者servlet将会创建新的会话,但是注意是注意原有会话还存在,只是这个旧的session ID仍然存在于服务端,只不过再也没有客户端会携带它然后交予服务端校验。
(3)销毁session
第一:调用session.invalidate()
第二:session过期
第三:服务器重新启动
五、session几个常用的方法
1.内容保存在session中,同时在其他页面中获取session内容
<!--将内容“我们”保存在HttpSession中的“a”-->
<%
session.setAttribute("session_name","session_value")
session.setAttribute("a",我们);
%>
<!--从HttpSession中获取“a”的值-->
<%
session.getAttribute("a");
%>
2.销毁session的内容 (重)
<%
session.invalidate();
%>
由于我们保存了session的内容,当我们要退出的时候必须销毁所有保存在session的信息,这时候用到session.invalidate( )
六、session的一个例子
1.创建login.jsp用于登入
<body>
<form action="do_login.jsp" method="post">
username:<input type="text" name="username"><br>
passward:<input type="text" name="passward"><br>
<input type="submit" name="提交">
<input type="reset" name="重置">
</form>
</body>
通过post方法提交信息到do_login.jsp中
2.创建do_login.jsp处理信息
<%
String username=request.getParameter("username");
String passward=request.getParameter("passward");
if(username!=null&&passward!=null){
session.setAttribute("username",username);
response.setHeader("refresh","1;URL=welcome.jsp");
}
%>
通过request.getParameter( )方法获取提交“username”“passward”信息,通过session.setAttribute( )将username保存在session中,通过response.setHeader( )自动刷新跳转到welcome.jsp中
3.创建welcome
<%if(session.getAttribute("username")!=null){ %>
欢迎:<%= session.getAttribute("username") %>用户
<a href="loginout.jsp">注销</a>
<%}else{ %>
请登入:<a href="login.jsp">登入</a>
<%} %>
<%if(session.isNew()) {%>
欢迎新用户
<%} else{%>
欢迎老用户
<%} %>
</body>
通过session.getAttribute(“username”) 获取到username信息。注销是跳转到loginout.jsp
4.创建loginout.jsp将session内容销毁
<%
session.invalidate(); response.setHeader("refresh","1;URL=welcome.jsp");
%>
通过session.invalidate()销毁session,在跳转到welcome.jsp中判断是否还有session内容