单账号同时只能一处登录
相关session
- 用户保存:session.setAttribute(“user”) 保存的是User实体类
- 图片验证码:session.setAttribute(“img_code”) 保存的是一串字符串
- 短信验证码:session.setAttribute(“verifycode”) 保存的是一串字符串
思路
- 用户每次访问服务器会创建一个session,登录的时候会放key="user"的值进session中
- 获取user的UserName(用户名是唯一的),将其存放到一个全局存储servletContext中
- 每次登录时判断该存储空间中是否存在该用户名,如果有则禁止登录
监听session相关的事件
public class SessionListener implements HttpSessionListener, HttpSessionAttributeListener
{
public static final Logger logger= LoggerFactory.getLogger(SessionListener.class);
@Override
public void sessionCreated(HttpSessionEvent httpSessionEvent) {
logger.info("session创建");
}
@Override
public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
logger.info("进入session销毁");
}
@Override
public void attributeAdded(HttpSessionBindingEvent httpSessionBindingEvent) {
logger.info("添加session项");
}
@Override
public void attributeRemoved(HttpSessionBindingEvent httpSessionBindingEvent) {
logger.info("移除session项");
}
@Override
public void attributeReplaced(HttpSessionBindingEvent httpSessionBindingEvent) {
}
}
Session销毁处理
- 在用户主动注销登录时,session销毁正常
- 关闭页面或者浏览器的时候…
- 用户系统崩了的时候…
- …
目前考虑得还不够完善,所以想用心跳机制写完美一点