ThinkPHP中不允许用户在多个设备登录的方法

Step1 在用户数据表中加一个字段last_login, 用来记录用户登录时间戳

Step2 在每次登录时, 在Session和数据表中同时记录登录时间, 所以doLogin()方法中的部分示例代码如下

  //验证通过以后,先生成一个登录时间
  $loginTime = time();

  //session操作
  session('user', $res);
  session('user')['login_time'] = $loginTime; //记录登录时间

  //把登录时间更新入数据库
  db('userx')
     ->where('username', 'eq', $username)
     ->setField('last_login', $loginTime);
 
 echo 'loginSuccess';

Step3 在需要检测是否已经在其他设备登录的页面, 其控制器继承IndexBase基类, 不再继承Controller基类; 如果IndexBase基类没有, 就建立一个

Step4 在IndexBase中建立一个方法checkOtherLogin(), 用来检测是否已在其他设备登录. IndexBase的示意代码如下

<?php

namespace app\index\controller;

use think\Controller;

class IndexBase extends Controller
{
    //功能: 检测是否在另一设备登录
    protected function checkOtherLogin(){
        if (session('user')) {
            $userId=session('user')['id'];
            
            //取得session中的登录时间
            $loginTimeIs=session('user')['login_time'];

            //取得数据库里的登录时间
            $loginTimeIb=db('userx')
                ->where('id','eq',$userId)
                ->find()['last_login'];

            //它们不同的则退出登录, 并跳转至首页
            if($loginTimeIs!=$loginTimeIb){
                session('user', null);
                $this->redirect(url('index/index/index',['from'=>'otherLogin']));
            }
        }
    }

    // 初始化方法
    protected function _initialize()
    { 
        $this->checkOtherLogin();
    }
}

如何更改jQuery Validation Plugin的报错的显示位置

可以使用这个代码

<label for="你的input的对应的id" class="error"></label>

这个label的位置, 就是jQuery Validation Plugin的报错的显示位置

这样可以避免比如radio类型的input, 它们的报错会显示在第1个radio的位置的问题.

CSS3画实心圆点

示例代码如下

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        .dot {
            width: 100px;
            height: 100px;
            border: 1px solid #2f5594;
            border-radius: 50%;
            background: #2f5594;
        }
    </style>
</head>

<body>
    <div class="dot"></div>
</body>

</html>

Next entries » · « Previous entries