php如何实现账号不能同时登陆

  介绍

这篇文章给大家分享的是有关php如何实现账号不能同时登陆的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

解决的思路是每当用户登陆时我们必需记录当前的用户id和session_id,如果有人在其它地方用此账号登陆时,我们把此用户id对应的session_id的会话文件删除,并重新记录当前的session_id。那么之前的用户就失效了。

登录。php代码如下:

& lt; php ?   session_start ();   ,   require  & # 39; db.php& # 39;;   ,   如果(!空($ _POST[& # 39;提交# 39;])),{   uname 美元;才能=,!空($ _POST [& # 39; uname # 39;]), ?,修剪($ _POST [& # 39; uname # 39;]),:, & # 39; & # 39;;   upwd 美元;才能=,!空($ _POST [& # 39; upwd& # 39;]), ?,修剪($ _POST [& # 39; upwd& # 39;]),:, & # 39; & # 39;;   ,//这才能里只是演示,实际情况是在数据库里查询并判断   如果才能(uname 美元==,& # 39;测试# 39;,,,,upwd 美元;==,& # 39;测试# 39;),{   ,,,//这里假设测试用户id为1   ,,,uid 美元;=,1;   ,,,session_id 美元;=,session_id ();   ,,,,   ,,,//判断是否已有用户登陆过   ,,,res 美元;=,mysql_query (“SELECT  session_id 得到tb_login_state  WHERE  uid={$ uid}“);   ,,,data 美元;=,作用是(res);   ,,,如果(!空(元数据)),{   ,,,,,sessionId 美元;=,$ data [& # 39; session_id # 39;];   ,,,,,sessionFilePath 美元;=,session_save_path(),只DIRECTORY_SEPARATOR 只& # 39;sess_& # 39;,只sessionId美元;   ,   ,,,,,//删除上次用户登陆的会话文件   ,,,,,如果(file_exists (sessionFilePath美元),,,,is_writable (sessionFilePath美元)),{   ,,,,,,,@unlink ($ sessionFilePath);   ,,,,,}   ,,,,,//删除用户登陆信息   ,,,,,mysql_query(得到tb_login_state 获“DELETE  WHERE  uid={$ uid}“);   ,,,}   ,,,//添加新的用户登陆信息   ,,,mysql_query (“INSERT  INTO  tb_login_state 价值({$ uid},, & # 39; {$ session_id} & # 39;)“);   ,   ,,,美元_SESSION[& # 39;用户信息# 39;],=,阵列(   ,,,,,& # 39;名字# 39;,=在美元uname   ,,,);   ,,,echo  & # 39; & lt; script 类型=拔谋?javascript"在警报(“您已成功登陆,跳转首页“);& lt;/script> & # 39;;   ,,,echo  & # 39; & lt; script 类型=拔谋?javascript"祝辞location.href=https://www.yisu.com/zixun/index . php”rel=巴獠縩ofollow”;脚本 ';   }   }   ?>         <>头      <标题>用户登陆页面   头   身体<>   <形式action="方法=皃ost”>   用户名:   

索引。php代码如下:

& lt; php ?   头(& # 39;- type: text/html; charset=utf - 8 # 39;);   session_start ();   ,   如果(!空($ _SESSION[& # 39;用户信息# 39;])),{   echo 才能;& # 39;您好:& # 39;,_SESSION美元[& # 39;用户信息# 39;][& # 39;名字# 39;];   },{else    头才能(& # 39;地点:login # 39;);   }

db。php代码如下:

& lt; php ?   db 美元;=,mysql_connect(& # 39; 127.0.0.1 # 39; & # 39;根# 39;,& # 39;& # 39;),或是死(& # 39;connect 错误# 39;);   mysql_select_db(& # 39;测试# 39;),或是死(& # 39;select  db 错误# 39;);   mysql_query (& # 39; set  names  use utf8 # 39;),或是死(& # 39;set  names 错误# 39;);

tb_login_state表结构如下:

CREATE  TABLE “tb_login_state”, (   “uid”, int (11), unsigned  NOT  NULL  COMMENT  & # 39;用户id # 39;,   “session_id”, varchar (32), NOT  NULL  DEFAULT  & # 39; & # 39;, COMMENT  & # 39;存储用户的session_id # 39;   ),引擎=InnoDB  DEFAULT  CHARSET=utf8 评论=& # 39;用户登陆状态表& # 39;;

如果是会话存储方式不是文件,而是存在mysql, memcache,复述中,思路其实是一样的,都是把前一次的session_id保存。判断用户是否登陆过,如果登陆过就让上一次的会话失效(删除会话数据)。

php的框架有哪些

php的框架:1,Laravel, Laravel是一款免费并且开源的php应用框架。2,Phalcon, Phalcon是运行速度最快的一个php框架。3,Symfony, Symfony是一款为Web项目准备的php框架。4,Yii, Yii是一款快速、安全和专业的php框架。5,CodeIgniter, CodeIgniter是一款非常敏捷的开源php框架。6,CakePHP, CakePHP是一款老牌的php框架1:8)。Kohana, Kohana是一款敏捷但是功能强大的PHP框架。

php如何实现账号不能同时登陆