[문제 설명]: 동일한 사용자가 동시에 여러 번 로그인하는 것을 감지할 수 없으면 위험합니다. 왜냐하면 다른 사용자가 귀하의 계정에 로그인하고 있는지 알 수 있는 방법이 없기 때문입니다. 동일한 사용자가 여러 번 로그인하는 것을 방지하는 방법은 무엇입니까?
【해결책】
(1) 로그인하고 본인 인증이 성공할 때마다 session_id가 다시 생성됩니다.
session_regenerate_id(); session_register ("username") ;
(2) 사용자 데이터베이스에서 sessionid 필드를 열고 session_id를 다시 생성한 후 이 필드를 업데이트합니다.
$sessionid = session_id(); $db = new PDO('sqlite:softToken.db'); $sql = "update userinfo set sessionid ='$sessionid' where username='$username' and passwd='$passwd';"; $query = $db->prepare($sql); $query->execute();
(3) 사용자 이름을 저장하기 위한 세션 생성
$_SESSION["username"] = $username;
(4) URL 재작성을 사용하고 session_id를 전달합니다
$url = "main.php?sid=".session_id(); unset($db); echo "<font color=blue>登录成功,正在跳转!</font>" ; header ("Location:$url");
(5) 이동하려는 페이지 시작 부분에
을 추가하세요.
main.php
<?php header('Content-type:text/html; charset=utf-8'); $sessionid = $_GET['sid']; session_id($sessionid); session_start (); $username = $_SESSION["username"]; $db = new PDO('sqlite:softToken.db'); $sql = "select * from userinfo where username='$username' and sessionid='$sessionid';"; $query = $db->prepare($sql); $query->execute(); $user = $query->fetch(PDO::FETCH_OBJ); if ($user->username == ""){ session_destroy(); echo "<script language='javascript' type='text/javascript'>" ; echo "window.location.href = 'index.html';" ; echo "</script>" ; exit () ; } ?> <html> <body> ...... </body> </html>
위 내용은 동일한 계정에 대한 다중 로그인을 동시에 효과적으로 방지하기 위한 PHP의 솔루션입니다. 동일한 계정에 대한 동시 로그인 문제를 해결하는 데 모든 사람에게 도움이 되기를 바랍니다.