时间:2021-07-01 10:21:17 帮助过:51人阅读
那么如何友好的限制用户账户登陆的呢?我们首先分析一下PHP是如何识别用户是否登陆的。由于HTTP协议无状态性的特点,我们无法通过它对用户进行识别。一般来说,对用户的识别主要通过cookie或session,它们之前最大的不同是cookie数据由客户端存储,每次向服务端发送请求时,客户端把有效的cookie随请求发送到服务端,而session数据由服务端存储,服务端可以根据客户端发送的特定cookie值来判定这些请求是否属于同一请求。我们这样对用户进行登陆检测:
显而易见,上面的代码并不能保证单用户只能同时登陆一次。第一种单账户登陆限制的办法是登陆时存储本次回话的session id,当用户登陆时,首先删除之前用户的session id,再把本次登陆的session保存起来,这样一来,原来的用户就会被新用户挤下线:
在这个基础上,我们可以对单用户同时登陆的次数进行限制,只需更改kick_user函数如下:
function kick_user($num=1){ $last_login_session_id_file = file_get_contents("loginsession.txt"); //获取上次登陆的session id $last_login_session_id_arr = explode("|",$last_login_session_id_file); if(!in_array(session_id(),$last_login_session_id_arr)){ array_push($last_login_session_id_arr,session_id()); } if(count($last_login_session_id_arr) > $num) { $rmsession = array_shift($last_login_session_id_arr); } if(isset($rmsession)){unlink(session_path."/sess_".$rmsession);} file_put_contents("loginsession.txt",implode("|",$last_login_session_id_arr));}