禁用具有相同用户ID PHP的多个登录

时间:2020-06-09 18:42:15

标签: php mysql

我的登录页面有问题, 如果用户已登录,则用户可以在其他浏览器上使用相同的用户名再次登录

登录页面

require("config/config.default.php");
require("config/config.function.php");
require("config/functions.crud.php");
(isset($_SESSION['id_siswa'])) ? $id_siswa = $_SESSION['id_siswa'] : $id_siswa = 0;
($id_siswa<>0) ? jump("$homeurl/login.php"):null;
$siswa = mysql_fetch_array(mysql_query("SELECT * FROM siswa WHERE id_siswa='$id_siswa'"));
if(isset($_POST['submit'])) {
    $username = $_POST['username'];
    $password = $_POST['password'];
    $siswaQ = mysql_query("SELECT * FROM siswa WHERE username='$username'");
    if(mysql_num_rows($siswaQ)==0) {
        $info = info('Siswa tidak terdaftar!','NO');
    } else {
        $siswa = mysql_fetch_array($siswaQ);
        if($password<>$siswa['password']) {
            $info = info('Password salah!','NO');
        } else {
            $_SESSION['id_siswa'] = $siswa['id_siswa'];
            mysql_query("INSERT INTO log (id_siswa,type,text,date) VALUES ('$siswa[id_siswa]','login','masuk','$tanggal $waktu')");
            jump($homeurl);
        }
    }
}

数据库表siswa

CREATE TABLE `siswa` (
  `id_siswa` int(11) NOT NULL,
  `id_kelas` int(11) NOT NULL,
  `nis` varchar(30) NOT NULL,
  `no_peserta` varchar(30) NOT NULL,
  `nama` varchar(50) NOT NULL,
  `paket` varchar(1) NOT NULL,
  `username` varchar(50) NOT NULL,
  `password` text NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

数据库会话

CREATE TABLE `session` (
  `id` int(11) NOT NULL,
  `session_time` varchar(10) NOT NULL,
  `session_hash` text NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

我已经厌倦了在Google上尝试使用参考文献。 请帮助

1 个答案:

答案 0 :(得分:0)

我将使用您的数据库会话来存储时间,会话哈希,用户ID和IP地址。 每次页面加载时,我都会:

  1. 收集当前时间+ 30分钟(或您的超时量的平均值),会话哈希,用户ID和IP地址
  2. 查询会话数据库以查看会话计数,其中session_time <=当前时间+ 30分钟,其中session_hash =此会话哈希,userID =此用户ID,并且ip地址=此ip地址。这将告诉您加载页面的用户是否是该帐户允许的一个用户。
  3. 如果从第2步返回的计数为0,则意味着您需要让用户点击注销脚本(以确保销毁所有会话值),然后定向到登录脚本。
  4. 确保您的注销脚本从会话表中删除该特定用户ID的所有条目。
  5. 现在,当有人尝试登录时,请检查他们尝试登录的用户ID,因为在数据库中没有名为“ sessions”的活动会话条目。