---------------------------------------------参考博客资料整理-------------------------------------------------
1. 设置session 【参考http://blog.csdn.net/maxracer/article/details/5357458】
ServletActionContext.getRequest().getSession().setAttribute("user", u);
ServletActionContext.getRequest()得到Request请求,然后getSession()得到Session,最后使用setAttribute("user", u)往session
中放入名为user的变量,u是user的值
ActionContext.getContext().getSession().put(key,value); 也可以实现
2. action中设置session有效期的三种方法 【参考http://omyyal.iteye.com/blog/1728610】
在使用了struts2框架的任何地方使用
ServletActionContext.getRequest().getSession().setMaxInactiveInterval(xxx);
方法二:
在Action中定义一个HttpServletRequest的成员对象req;
Action类实现ServletRequestAware接口,实现其中的方法;
在实现的方法中编写: req=方法参数;
然后在该Action中任何需要用到Session的地方使用req.getSession()......
方法三:
在工程的 web.xml中 设置session的有效期
<session-config>
<session-timeout>30</session-timeout>
</session-config>
session-timeout元素用来指定默认的会话超时时间间隔,以分钟为单位。该元素值必须为整数。如果session-timeout元素的值为零或负数,则表示会话将永远不会超时。 session-timeout的取值范围是1-1440。
setMaxInactiveInterval和session-config的比较:
1)、setMaxInactiveInterval的优先级高,如果setMaxInactiveInterval没有设置,则默认是session-config中设置的时间。
2)、setMaxInactiveInterval设置的是当前会话的失效时间,不是整个web服务的。
3)、setMaxInactiveInterval的参数是秒,session-config当中配置的session-timeout是分钟。
3. action中清除session的三种方法 【参考http://blog.sina.com.cn/s/blog_654d69690100vwsr.html】
第一种方法==》继承SessionAware类来取得session,然后用invalidate()方法清理
public class ExitAction extends ActionSupport implements SessionAware{
@Override
public String execute() throws Exception {
HttpServletRequest request = ServletActionContext.getRequest();
HttpSession session1 = request.getSession();
session1.invalidate();//刚开始尝试的是这种方法,但是没有效果,终于发现原因是没有继承SessionAware
return super.execute();
}
public void setSession(Map arg0) {
}
}
第二种方法 ==》用ActionContext取session,然后用clear()方法清理
public class ExitAction extends ActionSupport{
@Override
public String execute() throws Exception {
ActionContext ac = ActionContext.getContext();
Map session = ac.getSession();
session.clear();
return super.execute();
}
}
第三种方法 ==》一样用ActionContext取session,然后取一个Session的KEY,清除该KEY的session,这种办法可以选择性的清理你要清理的session
public class ExitAction extends ActionSupport{
@Override
public String execute() throws Exception {
ActionContext ac = ActionContext.getContext();
Map session = ac.getSession();
session.remove("buser");
session.remove("guser");
session.remove("fuser");
return super.execute();
}
}
------------------------------------------------------------------------------------------------------------------
我的方法是:
public void logout() throws IOException{
HttpServletRequest request = ServletActionContext.getRequest();//获取action上下文中request
String name=(String) request.getSession().getAttribute("userName");//通过request取得session中的userName属性
System.out.println(" before logout:"+name);
request.getSession().removeAttribute("userName");//通过调用removeAttribute()方法删除该属性
result="ok";
name=(String) request.getSession().getAttribute("userName");
System.out.println(" after logout:"+name);//输出after logout null
ServletActionContext.getResponse().getWriter().print(result);//把结果往前端传回
}
在页面上单击“退出登录”按钮----->触发事件通过ajax访问action【LogoutAction.java】----->采用上述方法清除用户名------>返回到js文件中,用window.location.reload达到刷新本页效果----->此时登录已退出