我要实现多用户不能同时登录的问题
问题是如果之前点击过html这个页面,下次再次点击就不会走过滤器,应该是缓存的问题,
网上说 在html上加
这种方法试过也不管用啊,
我这个页面是后台直接生成的,不是点击页面生成的所以加“随机数”也不行
在这求大佬指点
是不是session 做缓存了 如果session 做了缓存 需要在清空session 吧
你说的是单点登陆吗?
我认为这个应该不是你说的缓存的问题。
点击一个按钮,发出去请求,那是web服务器去接收请求的,没走过滤器,你应该查一下你的代码。看看这个请求为什么没进入到拦截器
输出url 的时候在尾部加上一个 ?xxx=<一个随机数> ,这样会使浏览器误认为这是一个新的访问,会去全新请求,欺骗浏览器
这个不是缓存的问题,是请求拦截机制的问题,所有的登陆请求都要走过滤器,进行安全认证和用户信息认证的,你不可以只拦截一次或者一部分,多用户登陆的问题可以记录相同用户的信息,再次登陆的时候把用户踢出去
会员在登录的时候,记录一个随机值到会员表的某个字段里(比如loginRndKey字段),然后session也同时记录下这个随机值。这种情况我们称为A吧。
会员如果在别的地方登录,或者用别的浏览器登录,那么就会再次随机出另一个值。这种情况称为B吧。
然后A在操作的时候,网站程序判断字段的值与session的值会不会一样。只要第二个地方登录了,那么第一个地方的值肯定不一样了,因为字段的值被第二个登录的地方给随机替换掉了。那么程序就强制登出A的会员帐号(通常是会员A点击的时候,弹出提示,并退出)。
利用HTTP协议清空,HTTP Header 参数Cache-Control来清空缓存;
Cache-Control 的参数包括:
max-age=[单位:秒 seconds] — 设置缓存最大的有效时间. 类似于 Expires, 但是这个参数定义的是时间大小(比如:60)而不是确定的时间点.单位是[秒 seconds].
s-maxage=[单位:秒 seconds] — 类似于 max-age, 但是它只用于公享缓存 (e.g., proxy) .
public — 响应会被缓存,并且在多用户间共享。正常情况, 如果要求 HTTP 认证,响应会自动设置为 private.
private — 响应只能够作为私有的缓存(e.g., 在一个浏览器中),不能再用户间共享。
no-cache — 响应不会被缓存,而是实时向服务器端请求资源。这一点很有用,这对保证HTTP 认证能够严格地禁止缓存以保证安全性很有用(这是指页面与public结合使用的情况下).既没有牺牲缓存的效率,又能保证安全。
no-store — 在任何条件下,响应都不会被缓存,并且不会被写入到客户端的磁盘里,这也是基于安全考虑的某些敏感的响应才会使用这个。
must-revalidate — 响应在特定条件下会被重用,以满足接下来的请求,但是它必须到服务器端去验证它是不是仍然是最新的。
方法一:在
标签里增加如下meta标签。
方法二:在java代码中增加如下代码。
response.setHeader("Cache-Control","no-cache");
response.setHeader("Pragma","no-cache");
response.setDateHeader("Expires",0);