# 登录设计方案分析
## 场景
登录在各种系统,网站,app都是应该有的,但是如何保证用户信息密码不泄露?并且同时提高用户的体验。
## 传统网站的登录
### Cookie
Cookie是存储在客户端的,采用cookie保存用户的登录状态,浏览器在每次发送请求都会携带cookie想服务器发起请求,服务器通过检查cookie里携带的信息来判断当前用户是否登录,或者该用户是否登录过期。
#### 安全性:
这中发生虽然简单粗暴,但是却是最不安全的,因为你的cookie信息暴露在客户端,一个有经验的人就可以,通过cookie里的信息,来寻找系统的漏洞。
#### 优化方案:
对cookie中的信息进行加密处理,到服务端时在进行解密处理。优化后,对于安全性不是特别高的网站,可以采用此种登录,尤其是在浏览器关闭后还能保存登录状态。
### Session
Session是存储在服务端的,因此安全性相比cookie来说就很好了,信息并不会暴露给用户,同样可以存储登录用户状态。
#### 安全性:
安全性较高,但是由于存储在服务端,不可以存储太多的数据,且session的有效时间一般不会太长,并不适合前台用户登录,因此比较适合后台登录验证。
## App的登录
在app中我们基本很难使用cookie+session的方式登录,因为在app中并不是每次请求都是同一个对象。
### Token登录机制
根据cookie和seesion的优缺点,设计一种基于token的登录机制。
用户第一次登录,输入账号和密码到服务器去验证
服务器验证登录成功,为该账号生成一个唯一的token,这个token保存在服务端,并有时效性,有效时间根据具体需求而设,并返回给客户端(app)
客户端拿到token后保存起来,以后访问服务器要带该token证明其合法的身份
服务端每次接收到客户端的token都要检验其合法性,如若token不合法,拒绝访问
当用户退出登录,则销毁该token,持有token的人将无法访问服务端
***注:token可以保存在数据库中,或者缓存中,如保存在缓存中,可以提高性能。***
#### 安全性
只需要在第一次登录时输入密码,减少了密码的暴露次数,因为token具有实效性,即便泄漏也是短时间有效,用户重新登录就失效了,当然安全性还有空间可以提高。
- 我的笔记
- 服务器
- ubuntu svn 环境的搭建
- ubuntu Memcache 的配置
- ubuntu 密钥登录服务器
- centos 搭建服务器环境
- nginx+tomcat 集群搭建
- 餐厅运营来看如何构建高性能服务器
- VMware-Centos-网络配置
- Ubuntu-PHP-Apache-Mysql-PhpMyadmin的搭建
- UbuntuApache配置日志
- linux获取当前执行脚本的目录
- Ubuntu svn的快速配置(原创)
- Https配置
- Mysql 不支持远程连接解决方案
- ubuntu+apache+rewrite
- php Mcrypt 扩展
- 重启Apache出现警告信息Could not reliably determine the server's fully qualified domain name,
- Mysql无法远程连接
- 定时任务设置
- Linux中Cache内存占用过高解决办法
- Ubuntu14-04安装redis和php5-redis扩展
- php
- thinkphp3.2 一站多城市配置
- PHP 安全编程建议(转)
- phpexcel导入时间处理
- Mysql按时,天,月,年统计数据
- PHP-支付宝-APP支付
- 百度爬虫-获取全国数据
- PHPEXCEL导入导出excel文件
- php-微信app支付后端设计
- Phpqrcode生成二维码
- 图片+文字水印
- 数据库优化
- java
- Mybatis 二级缓存
- 微信
- 微信公众号多域名授权
- 微信扫码支付
- web
- 网站性能优化方案实施
- ionic环境搭建
- 登录设计方案
- 设置dev元素的宽高比例
- 设计模式
- app
- 版本更新
- 微擎数据库操作扩展
- select
- find
- delete
- update
- insert
- where
- order
- page
- group
- having
- limit
- fields
- debug
- bind
- join
- alias
- query
- 聚合函数
- count
- sum
- max
- min
- avg
- 事务管理
- 自增自减
- 算法设计
- ACM:入口的选择------深度优先搜索
- java:N的N次方
- 最少拦截系统:贪心思想
- ACM:蚕宝宝:搜索
- ACM:n!的位数 :斯特林公式
- 神奇的异或
- 中国剩余定理
- 矩阵翻硬币
- 回溯法
- ACM程序设计网站集锦
- 博弈论
- 多维空间上的搜索算法
- 算法学习笔记之一(排序)
- 算法学习笔记之二(堆排序)
- 算法学习笔记之三(快速排序)
- ACM俱乐部密码
- 原创开源
- 个人感悟