| PHP是如何识别用户是否登陆的。由于HTTP协议无状态性的特点,我们无法通过它对用户进行识别。一般来说,对用户的识别主要通过cookie或session,它们之前最大的不同是cookie数据由客户端存储,每次向服务端发送请求时,客户端把有效的cookie随请求发送到服务端,而session数据由服务端存储,服务端可以根据客户端发送的特定cookie值来判定这些请求是否属于同一请求。我们这样对用户进行登陆检测: 
<?php
session_start();
if(isset($_SESSION['login']) && $_SESSION['login'] == true){
    echo "登陆成功!";
}
if(isset($_POST['uname']) && isset($_POST['password'])){
$uname = $_POST['uname'];
$pass = $_POST['password'];
if($uname == "admin" && $pass == "admin"){
    $_SESSION['login'] = true;
    echo "登陆成功!";
}else{
    echo "用户名或密码错误!";
}
}
?>
<form action="" method="post">
<input type="text" name="uname">
<input type="password" name="password">
<input type="submit">
</form>显而易见,上面的代码并不能保证单用户只能同时登陆一次。第一种单账户登陆限制的办法是登陆时存储本次回话的session id,当用户登陆时,首先删除之前用户的session id,再把本次登陆的session保存起来,这样一来,原来的用户就会被新用户挤下线: 
<?php
define("session_path",dirname(__FILE__)."/session");  //设置session存放的目录
session_save_path(session_path);
session_start();
if(isset($_SESSION['login']) && $_SESSION['login'] == true){
    echo "登陆成功!";
}
if(isset($_POST['uname']) && isset($_POST['password'])){
    $uname = $_POST['uname'];
    $pass = $_POST['password'];
    if($uname == "admin" && $pass == "admin"){
        $_SESSION['login'] = true;
        kick_user();
        echo "登陆成功!";
    }else{
        echo "用户名或密码错误!";
    }
}
function kick_user(){
    $last_login_session_id = file_get_contents("loginsession.txt");//获取上次登陆的session id,实际项目中最好存放在数据库中
    $last_login_session_file = session_path."/sess_".$last_login_session_id;//获取session文件名
    if(session_id()!= $last_login_session_id){
        unlink($last_login_session_file);
        file_put_contents("loginsession.txt",session_id());
    }
}
?>
<form action="" method="post">
<input type="text" name="uname">
<input type="password" name="password">
<input type="submit">
</form>在这个基础上,我们可以对单用户同时登陆的次数进行限制,只需更改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));
}(责任编辑:最模板) | 



 织梦蓝色轴承机械五金模
							人气:524
							织梦蓝色轴承机械五金模
							人气:524
						 Vanesa 英文大型百货商城
							人气:323
							Vanesa 英文大型百货商城
							人气:323
						 YourStore外贸英文时尚服饰
							人气:261
							YourStore外贸英文时尚服饰
							人气:261
						 Printshop 印刷业通用magent
							人气:104
							Printshop 印刷业通用magent
							人气:104
						 ecshop仿钻石小鸟2016整站模
							人气:932
							ecshop仿钻石小鸟2016整站模
							人气:932
						 简洁asp服务型企业网站源
							人气:669
							简洁asp服务型企业网站源
							人气:669