设计php登录系统
来源:互联网 发布:淘宝代购服务点申请 编辑:程序博客网 时间:2024/04/29 15:34
首先,将登录系统分以下几块:
1. 用户名和密码的验证
2. 保存登录状态
3.退出登录,撤销登录状态
用户名和密码的验证,由于http协议是明文的,注意在提交数据之前,可用js等方法对用户名和密码进行加密。在服务端接受到数据之后,再进行处理验证,还有数据库中保存密码切不可直接存原有密码,经过加密处理再存进去,保证数据安全。
保存登录状态,简单的可以直接setcookie将用户名和密码做响应处理,存到浏览器,每次接受到请求时,判断cookie是否存在,若存在则表示已经登录。这种方法安全性低,若用户伪造cookie,则可以绕过登录判断。
第二种方法是通过session将用户登录状态保存在服务端,具体方法是,session_start(),$_SESSION['user_id'] = 1 这样就在服务端做了登录成功的标记,再设置setcookie(‘user_id','xxx',time()+3600),保存用户id到客户端,之后每次处理请求时都判断接收到的user_id在$_SESSION中是否存在,来判断用户的登录状态。
好处是用户伪造了cookie,但是服务端的$_SESSION中没有登录信息,用户无法通过验证。
(ps:用session时可能会遇到 _SESSION未定义的错误,这个要看看是否开启了session,因为默认是不开启,开启方法有俩个,在程序前面加上session_start();或者在php.ini找到session.auto_start = 0,改为1,则默认自动开启)
无论哪种方法,在每次接受到请求时,都要验证用户是否登录,刷新登录状态。
最后退出登录,撤销登录状态,只用cookie做验证,则直接setcookie(’name','value',time()-3600),或者setcookie(‘name',''),设置cookie过期或者为空。
如果用了SESSION做判断,则要unset($_SESSION['user_id']) 或者session_destroy(),setcookie('user_id','')
上面2种是比较常规的方法,如果在服务器做了集群的情况,就需要考虑SESSION的同步。
同步的方法有3种:
1. 将SESSION信息存到数据库里
a. 存到一台数据库服务器中,里面弄个session表,用来存用户的登录状态。在用户请求过来时,都到该数据库中判断一下状态。
b. 将session表和其他业务表放到一起,做分布式,每个数据库中都备份一份。
a方法,有独立数据库服务器做处理,压力小;b方法对数据库压力较大。
2. 将SESSION信息存到cookie中,客户端对服务端发送请求的时候,服务端首先判断session是否包含该用户的登录信息,没有则查看cookie是否包含。有包含则在服务端保存session状态,达到同步的效果。
3. 将SESSION信息保存到memcache等缓冲中,memcache可做分布式,session保存到缓存中,其他服务器也可同时访问,优点是速度快,但是数据不持久。
- 设计php登录系统
- 登录系统页面设计
- 登录系统设计模式
- PHP登录注册系统下
- PHP考勤登录系统--上
- PHP考勤登录系统--中
- PHP注册登录系统--下
- php如何实现web系统单点登录
- php如何实现web系统单点登录
- PHP 学习笔记 账号登录系统
- 多帐套,多组织 登录系统设计
- Redis、Cookie、Session单点登录系统设计
- Java注册登录抽奖系统模块化设计
- PHP系统设计与说明
- php项目权限系统设计
- iOS+PHP 注册登录系统(一) PHP部分
- SSO单点登录系统设计,数据库设计文档
- SSO单点登录系统设计,数据库设计文档
- 使用os.walk()方法
- POJ 2352 Stars (线段树&&树状数组)
- Oracle热备份和常见错误
- android前后台切换技术
- 程序员应该读的书
- 设计php登录系统
- phpstorm +wampp+Xdebug 远程调试配置
- c/c++的全局变量
- 研祥MEC整机在铁路平交道口自动预警监控系统的应用
- 2.第一个程序: "Hello, World"
- 利用parse_url和parse_str快速解析url
- Android Lint的使用
- 数据结构(2)——链表形式的堆栈,以及火车车厢重排问题
- C/C++学习笔记11:指针与引用的区别