1.数据表设计

用户通用信息表

CREATE TABLE `user` (`id` int(11) NOT NULL AUTO_INCREMENT,`nickname` varchar(32) NOT NULL,`avatar` varchar(128) DEFAULT NULL,`logintime` int(10) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8

用户登入信息表

CREATE TABLE `user_auths` (`id` int(11) NOT NULL AUTO_INCREMENT,`user_id` int(11) NOT NULL,`identity_type` varchar(32) NOT NULL COMMENT '登入类型normal(手机号,邮箱,用户名)或(微信)weixin或(微博)weibo或(QQ)qq',`identifier` varchar(56) NOT NULL COMMENT '登入标识(phoneNumber,email,username)或(微信UserName)或(微博UID)',`credential` varchar(42) NOT NULL COMMENT '密码凭证access_token',PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8

2.如何开发

第一步:用户登入成功后刷新授权表(user_autos),并将新生成的密码凭证保存至客户端;

第二步:添加拦截器,除登入请求、退出请求以及静态资源的请求不需要验证外,其他的请求都需要将客户端的密码凭证和服务器的密码凭证进行对比;

第三步:根据匹配结果,如果密码凭证不一致,执行退出操作,并提示该账号已在其他地方登入。

本文用ThinkPHP5.1框架做演示:

用户登入页面Index.php

<?php
namespace app\demo\controller;
class Index extends Com
{public function login(){//测试数据,如果已建库,可以添加至数据表再写入session$this->recorder->write('user_id',9527);$this->recorder->write('user_name','华安');$this->recorder->write('access_token',md5('opassword'));$this->success('登入成功','/index/index');return '登入首页';}public function index(){return '成功登入首页';}
}

配置的存储和读取Recorder.php

<?php
namespace app\demo\controller;
use think\facade\Session;
class Recorder
{private static $data;public function __construct(){if(!Session::has('user_info')){self::$data = array();}else{self::$data = Session::get('user_info');}}public function write($name,$value){self::$data[$name] = $value;}public function read($name){if(empty(self::$data[$name])){return null;}else{return self::$data[$name];}}public function delete($name){unset(self::$data[$name]);}public function __destruct(){Session::set('user_info',self::$data);// TODO: Implement __destruct() method.
    }
}

拦截器Com.php

<?php
namespace app\demo\controller;
use think\App;
use think\Controller;
use think\facade\Session;
class Com extends Controller
{protected $recorder;public function __construct(App $app = null){$this->recorder = new Recorder();parent::__construct($app);}protected function initialize(){$controller = $this->request->controller();$action = $this->request->action();//添加拦截器if($controller.$action !== 'Indexlogin'){//验证是否登录if(!$this->check_login()){$this->error('请先登录','/index/login',3);}// $auth = db('user_auths')->where(['user_id'=>$this->recorder->read('user_id')])->find();//测试数据,登入方式可以自行选择,这里采用用户名的登入方式$auth = ['user_id'=>9527,'identity_type'=>'username','identifier'=>'华安','credential'=>md5('upassword')];if(empty($this->recorder->read('access_token'))){//token已失效,需要重新登入$this->redirect('/index/login');}if($auth['credential']!==$this->recorder->read('access_token')){$this->error('你的账号已在别处登入','/index/login');}}}public function check_login(){$is_login = false;if(Session::has('user_info')){$is_login = true;}return $is_login;}
}

路由配置route.php

return ['__domain__' => ['demo' => 'demo',
]

3.小结

本文将用户信息部分和逻辑部分分开处理,方便拓展,适用于多种登入方式。用户信息表可以随时增加任意字段,以满足前端各种业务需求。

注意:请不要将一个账号只能一个人登入这种说法和单点登入混淆开来。

转载于:https://www.cnblogs.com/xizhou/p/10835089.html

关于用户表设计及多用户登入限制相关推荐

  1. 产品需求文档、需求结构图、数据字典、全局说明、用例描述、需求描述、逻辑流程、原型设计、页面交互、登录注册、词汇表、数据统计、用户表设计、接口需求、功能清单、业务流程图、Axure原型、prd、文档实例

    产品需求文档.需求结构图.数据字典.全局说明.用例描述.逻辑流程.原型设计.页面交互.登录注册.词汇表.数据统计.用户表设计.接口需求.功能清单.业务流程图.Axure原型.prd.产品需求文档实例 ...

  2. dj电商-数据表的设计-用户表设计

    数据库的设计是关键的一步 本节根据界面,一步一步的推导出表需要有的字段内容 注册页面 >需要有一个用户表 记录用户注册相关的信息 用户名,密码,邮箱 登陆页面 登陆页需的信息,前面设计了 用户中 ...

  3. mysql怎么统计用户活跃数_如何查看用户使用情况(最近登入,活跃度。。。)...

    1.确保数据库已经打开审计 SQL show parameter auditNAME TYPE VALUE------------------------------------ ---------- ...

  4. 基于node的登入例子(node-koa-mongoose)

    前言 这是一个基于node实现的一个简单登入例子,对于刚上手node想进一步了解,前端页面如何请求到服务层 -> 路由处理 -> 数据库操作 -> 返回结果到页面这整个过程的同学比较 ...

  5. 海康服务器系统装不上,ivms-4200客户端登入不了云服务器

    ivms-4200客户端登入不了云服务器 内容精选 换一换 本章节为您介绍以下内容:准备弹性云服务器作为GDS服务器在使用GDS导入导出数据之前,需要准备一台或多台与GaussDB(DWS) 集群在相 ...

  6. 【转】扫描二维码登入安全吗?

    转载自 https://abcdabcd987.com/qrcode-login/ 昨天在知乎上看到了一个问题微信淘宝设计扫码登录的理由是什么,牺牲人性化来加强安全性?,本以为这是一个送分题,可是点开 ...

  7. 万亿级企业MySQL海量存储分库分表设计实践

    互联网业务往往使用MySQL数据库作为后台存储,存储引擎使用InnoDB.我们针对互联网自身业务特点及MySQL数据库特性,讲述在具体业务场景中如何设计表和分表.本文从介绍MySQL相关基础架构设计入 ...

  8. Linux 命令之 newgrp -- 登入另一个群组

    文章目录 命令介绍 常用选项 参考示例 切换登录用户组 命令介绍 newgrp 命令的英文全称为"new group",使用该命令指定用户组名称,执行命令后,其实是以相同的用户名, ...

  9. SSO方式实现微服务的登入业务

    1.登录业务介绍: 单一服务器模式 单一服务器模式用于登录的方式通常是使用session. 1.微服务 在分布式中通常使用单点登入(SSO(single sign on)模式)的方式实现用户登入,三种 ...

最新文章

  1. sublime text 安装Package Control
  2. mvvm模式和mvc的区别_mvvm 和 mvc 区别?
  3. 口语语言理解(SLU)最新资源库:综述、数据集、开源论文
  4. VTK:图片之FillWindow
  5. 1、solr包结构介绍,solrCore的安装配置,solr部署到Tomcat,多solrCore配置,配置中文分词器,界面功能介绍,Schema.xml的基本使用,数据导入
  6. UITableViewCell高亮时其子视图的状态修改
  7. 网页设计上机考试原题_《网页设计》上机考试试题
  8. Python:IPython性能度量
  9. OpenCV 图像金字塔buildPyramid、pyrDown、pyrUp
  10. oracle获取用户名,Oracle 用户名详解
  11. MyCat - 使用篇(5)
  12. 智能物流的常见应用场景及系统
  13. 引领数字医学高地,中山医院探索打造未来医院“新范式”
  14. python测验6_Python语言程序设计 - 测验6: 组合数据类型 (第6周)
  15. Python中对if __name__=='__main__:的理解
  16. 新印的钞票如何流入市场?
  17. 在PrimeFaces中更改主题
  18. python数据挖掘 | 期末题
  19. mysql根据分隔符将一行数据拆分成多行数据
  20. JavaScript - 核心语法学习

热门文章

  1. datasg中的数据存储情况
  2. plsql developer的一些使用
  3. 一个想法--开发与业务,我们互相依赖
  4. 给出一种符号表的组织方式和结构设计,要考虑数组类型和函数(不得与课件上的雷同)
  5. python处理excel文件的模块_python处理Excel文件的几个模块
  6. 服务器系统linux怎么安装教程,CentOS 8.0.1905 linux服务器系统安装与配置图解教程...
  7. java知识理论_JAVA理论知识 - OSC_rnoszD的个人空间 - OSCHINA - 中文开源技术交流社区...
  8. C++知识点5——迭代器简述
  9. oracle插入表为文件,将文本文件插入Oracle表中
  10. oracle解密des乱码,Oracle中des等算法的加解密