這篇文章給大家分享的是有關php如何實現賬號不能同時登陸的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
解決的思路是每當用戶登陸時我們必需記錄當前的用戶id和session_id,如果有人在其它地方用此賬號登陸時,我們把此用戶id對應的session_id的session文件刪除,并重新記錄當前的session_id。那么之前的用戶就失效了。
login.php代碼如下:
<?php
session_start();
require 'db.php';
if(!empty($_POST['submit'])) {
$uname = !empty($_POST['uname']) ? trim($_POST['uname']) : '';
$upwd = !empty($_POST['upwd']) ? trim($_POST['upwd']) : '';
//這里只是演示,實際情況是在數據庫里查詢并判斷
if($uname == 'test' && $upwd == 'test') {
//這里假設test用戶id為1
$uid = 1;
$session_id = session_id();
//判斷是否已有用戶登陸過
$res = mysql_query("SELECT session_id FROM tb_login_state WHERE uid={$uid}");
$data = mysql_fetch_assoc($res);
if(!empty($data)) {
$sessionId = $data['session_id'];
$sessionFilePath = session_save_path() . DIRECTORY_SEPARATOR . 'sess_' . $sessionId;
//刪除上次用戶登陸的session文件
if(file_exists($sessionFilePath) && is_writable($sessionFilePath)) {
@unlink($sessionFilePath);
}
//刪除用戶登陸信息
mysql_query("DELETE FROM tb_login_state WHERE uid={$uid}");
}
//添加新的用戶登陸信息
mysql_query("INSERT INTO tb_login_state VALUES({$uid}, '{$session_id}')");
$_SESSION['userInfo'] = array(
'name' => $uname
);
echo '<script type="text/javascript">alert("您已成功登陸,跳轉首頁");</script>';
echo '<script type="text/javascript">location.href="index.php" rel="external nofollow" ;</script>';
}
}
?>
<!DOCTYPE HTML>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>用戶登陸頁面</title>
</head>
<body>
<form action="" method="post">
用戶名:<input type="text" name="uname" value="" />
密碼:<input type="password" name="upwd" value="" />
<input type="submit" name="submit" value="登陸" />
</form>
</body>
</html>index.php代碼如下:
<?php
header('Content-Type:text/html;charset=utf-8');
session_start();
if(!empty($_SESSION['userInfo'])) {
echo '您好:', $_SESSION['userInfo']['name'];
} else {
header('Location:login.php');
}db.php代碼如下:
<?php
$db = mysql_connect('127.0.0.1','root','') or die('connect error');
mysql_select_db('test') or die('select db error');
mysql_query('set names utf8') or die('set names error');tb_login_state表結構如下:
CREATE TABLE `tb_login_state` ( `uid` int(11) unsigned NOT NULL COMMENT '用戶ID', `session_id` varchar(32) NOT NULL DEFAULT '' COMMENT '存儲用戶的session_id' ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用戶登陸狀態表';
如果是session存儲方式不是文件,而是存在mysql,memcache,redis中,思路其實是一樣的,都是把前一次的session_id保存。判斷用戶是否登陸過,如果登陸過就讓上一次的session失效(刪除session數據)。
php的框架:1、Laravel,Laravel是一款免費并且開源的PHP應用框架。2、Phalcon,Phalcon是運行速度最快的一個PHP框架。3、Symfony,Symfony是一款為Web項目準備的PHP框架。4、Yii,Yii是一款快速、安全和專業的PHP框架。5、CodeIgniter,CodeIgniter是一款非常敏捷的開源PHP框架。6、CakePHP,CakePHP是一款老牌的PHP框架。7.Kohana,Kohana是一款敏捷但是功能強大的PHP框架。
感謝各位的閱讀!關于“php如何實現賬號不能同時登陸”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。