用户登录网站后,用户在一段时间内与网站没有交互,则视为离开,需要用户重新登陆,如何实现?

如果能够详细说明就最好了,谢谢!

  1. 一段时间:设为10分钟。
  2. 用户重新登录:提示用户因为安全问题需要重新登陆。(类似支付宝提示用户重新登陆效果)
阅读 9.4k
5 个回答

楼主还在么?

正确的检测当然必须以后端为准(session的过期机制)。但缺点是一般会在用户提交后才告知用户:你需要登录。显然体验不够好。

你更关心的是前端吧?(我是根据问题的标签来猜测的)

首先要定义:什么是“与网站没有交互”?

我建议的方案如下:

  • 只要网页失去焦点(window 的blur事件),就开始一个 setTimeout 来调用函数 checkSession
  • 如果网页重新获取了焦点(focus事件),则clearTimeout
  • checkSession 函数用ajax默默地向后端请求检测session是否过期。如果是,则提醒用户重新登录

这个方案的优点是:足够简单

而缺点是:如果用户同时开了多个页面,那么经常看到重新登录的通告。

你可以进一步利用cookie来跨页面计时:只要有任意一个页面focus,那么clearTimeout

如果用的是django,则在settings.py中设置

SESSION_COOKIE_AGE=60*30

session里加个是否过期的字段,记录每次request的时间,每次请求和上一次请求时间做对比 然后做判断。

我猜你想做的除了逾時在後端踢出使用者外,還需要js跳通知讓使用者重新登入。

可以在js裡設定一個setTimeout的計時器,設定多久後顯示通知。

然後根據你的交互定義,看是要聆聽整個頁面的mousemove事件或click事件,把重置計時器的動作綁上去(clearTimeout 後再設一次setTimeout)。

就是简单的session过期cookie过期时间的问题啊,没有啥好回答的。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
101 新手上路
子站问答
访问
宣传栏