原创声明:本文为作者原创,未经允许不得转载,经授权转载需注明作者和出处
我们平常登录网站,比如登录QQ空间,当你登录了进去操作,一切正常。如果你有事走了半天,网页还开着,那么你再去操作当前登录的QQ空间你会发现不管你刷新还是点什么,都会让你跳到登录页面,这就是说明你长时间未操作,登录过期了。而且细心的你会发现可能每个网站的过期时间都不一样, 百度贴吧可能是十分钟,QQ空间的可能是5分钟。那么,这个过期时间是如何实现的呢?
以上的方式都是默认的过期时间的(ps:忘了是多少秒了~),我们还可以手动设置session的过期时间:
<session-config>
<session-timeout>时间长度(单位为分钟)</session-timeout>
</session-config>
在tomcat/conf/server.xml中定义defaultSessionTimeOut=时间长度(分钟)
以上三种方式中当值为-1时,session永不失效
接下来是简单的实战:
<!-- 表单提交,method使用post方法方法servlet中的dopost,action为login表示web.xml配置了的url是login -->
<form method="post" action="login">
用户名:<input type="text" name="username" width="100"/><br/><!-- 用户名提交到后台的字段是 username-->
密码:<input type="password" name="password" width="100"/> <br/><!-- 密码提交到后台的字段是 password-->
<input type="submit" name="登录" value="登录">
</form>
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
PrintWriter out=resp.getWriter();//获取输出到网页的对象
HttpSession session=req.getSession();//获得session
String uesrValue=(String)session.getAttribute("user");//获取session存储的属性值
if(uesrValue==null){//还没有登录过
String username=req.getParameter("username");//从表单中获取用户名
String password=req.getParameter("password");//从表单中获取密码
out.println("你还未登录<br/>");
session.setAttribute("user", username);//设定session中的用户名
session.setAttribute("password",password);//设定session中的密码
out.println(session.getId());//打印session ID
}
else{
String username=(String)session.getAttribute("user");//从session中获取用户名
String password=(String)session.getAttribute("password");//从session获取密码
out.println("用户名:"+username+"<br/>");
out.println("密 码:"+password+"<br/>");
session.invalidate();//使session无效
}
out.close();
}
运行完之后,我们手动在项目中访问login.jsp页面,输入以上方法,当我们第一次随便输入用户名和密码并且脑子里记下,然后访问:
第一次访问如下
这个表示之前没有用这个用户名登录,这是首次登录,然后传回了sessionId。
然后我们退回去,用刚刚的账号密码登录:
如图就打印了登录的用户名和密码(因为刚刚登录保存了会话)
以上工程文件放在了网盘,要看源码的可以自己去下:
http://pan.baidu.com/s/1cxlOJG
鸣谢:最近时间紧,上文的逻辑是根据文章http://blog.csdn.net/ccy0815ccy/article/details/21033523中的源码修(chao)改(xi)而来。