>백엔드 개발 >PHP 튜토리얼 >PHP는 동일한 사용자가 여러 번 로그인하는 것을 효과적으로 방지합니다_php 팁

PHP는 동일한 사용자가 여러 번 로그인하는 것을 효과적으로 방지합니다_php 팁

WBOY
WBOY원래의
2016-05-16 20:04:261153검색

[문제 설명]: 동일한 사용자가 동시에 여러 번 로그인하는 것을 감지할 수 없으면 위험합니다. 왜냐하면 다른 사용자가 귀하의 계정에 로그인하고 있는지 알 수 있는 방법이 없기 때문입니다. 동일한 사용자가 여러 번 로그인하는 것을 방지하는 방법은 무엇입니까?
【해결책】
(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

<&#63;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 () ; 
} 
&#63;> 
 
<html> 
<body> 
...... 
</body> 
</html>

위 내용은 동일한 계정에 대한 다중 로그인을 동시에 효과적으로 방지하기 위한 PHP의 솔루션입니다. 동일한 계정에 대한 동시 로그인 문제를 해결하는 데 모든 사람에게 도움이 되기를 바랍니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.