介绍
这篇文章给大家分享的是有关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框架。