#1 Arthur
各位大侠,如何防止用户重复登录?相同账号登录时如何踢掉之前账号。如果用session的话如何关闭其他用户的session。有点不太清楚,恳请各位赐教!
2014-05-06 23:00:06
#2 jake
放个在线用户表,然后每次访问页面都查询一次。登录后如果发现重复就踢出
2014-05-08 13:49:20
#3 Arthur
谢谢jake,我把我的解决方法是这样的:
1、用户数据表添加一个字段 sessionid;
2、用户登录成功后把sessionid写入上述字段;
spClass("lib_user")->update(array('uid'=>$_SESSION["userinfo"]['uid']),array('sessionid'=>session_id()));
3、修改spAclModel用户权限操作类(在文件spAcl.php)
/**
* 检查对应的权限
*
* 返回1是通过检查,0是不能通过检查(控制器及动作存在但用户标识没有记录)
* 返回-1是无该权限控制(即该控制器及动作不存在于权限表中)
*
* @param acl_name 用户标识:可以是组名或是用户名
* @param controller 控制器名称
* @param action 动作名称
*/
public function check($acl_name = SPANONYMOUS, $controller, $action)
{
$rows = array('controller' => $controller, 'action' => $action );
if( $acl = $this->findAll($rows) ){
foreach($acl as $v){
if($v["acl_name"] == SPANONYMOUS || $v["acl_name"] == $acl_name){
$user = spClass('lib_user')->find(array('uid'=>$_SESSION["userinfo"]['uid']));
if ( $user ){
$sessionid = $user['sessionid'];
if ( $sessionid != session_id()){
$_SESSION = array ();
if (isset ( $_COOKIE [session_name ()] )) {
setcookie ( session_name (), '', time () - 42000, '/' );
}
session_unset();
session_destroy ();
return 0;
}
}
return 1;
}
}
return 0;
}else{
return -1;
}
}
2014-05-17 22:08:19