核心是通过 缓存、Cookie以及SpringMVC拦截器 实现
登陆时以用户id为key在缓存中保存时间戳 在cookie中以一个全局变量为key保存时间戳
String times = new Date().getTime() + "";
memCache.put(userId + "mem_time_key", times); WebUtils.setCookie(response,"flag", times, 30);
我们知道cookie是保存在浏览器本地的,缓存保存在服务端
此时 还是这个用户 在另一个终端登录,会重复 上面代码的操作,更新在服务端的缓存 key相同 ,而value时间戳发生了变化
下一步,需要在每个页面引入功能写入功能js文件即可,写一个实现每次载入页面都会定时器10s执行的查询后台的 flag 对应的缓存的vlaue 并与本地cookie中的时间戳相比较,如果不一致说明,用户在别的浏览器登陆过,则可以清空cookie 强制退出,由于 后一次登录更改服务器缓存的时间戳,所以前一次登录会被强制退出。
function callbackFun() {
if (isLogin()) {
$.ajax({
url: "/check/userIsLogin.json",
data: {},
type: "post",
dataType: "json",
async: false,
success: functi