如题,如何实现?
我把我之前的实现过程讲一下,希望对你有帮助.
之前的项目是多个应用,一个应用专门用于处理登陆.也就是所谓的单点登陆(sso),登陆之后会用户信息存到redis中,30分钟会自动过期.存放方式为UUID->用户信息,之后uuid会缓存到客户端的cookie,之后客户每次请求都会去redis查一下该uuid是否存在,如果存在,则重置30分钟后过期,如果不存在,则跳到登陆页面重新登陆.
如果有另外一个帐号登陆,则在redis中查询该用户是否已经存在一个uuid,有则将旧的的uuid删除.添加新的uuid->用户信息的数据.
这样就实现了同一个帐号,同时只能登陆一次.
1、你可以重写session的存储,然后登录的时候,把之前此用户登录的session删掉即可。这个是最好的解决方案。
2、你可以每次请求的时候判断用户的UA和最后一次登录的UA是否一致,如果不一致你就让这个用户退出就行了。
使用acces_token就可以了,每次登录会生成一个token,然后将token存在webstorage或者cookie里面,在交互的时候,带上storage或者cookie中的token,检查是否一致,token不一致的用户就直接下线了
1.user表(这个就是普通用户表)
2.authorize表,存放tokentoken(char(8))
,user_id
,created_at
,expires_at
3.登录后将该user_id
的authorize表记录全部设为过期,在authorize中插入一条记录,并返回token。
4.使用token进行接口请求,如果authorize不存在记录或者记录已过期,则登录过期
由于token在服务端永远只有一个有效,所以保证了只能一个客户端同时在线
特意写了一个例子,用redis和缓存本地文件的方式实现的,你可以看看
http://www.codegong.com/docum...