溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

php如何實現賬號不能同時登陸

發布時間:2021-05-20 14:19:53 來源:億速云 閱讀:349 作者:小新 欄目:開發技術

這篇文章給大家分享的是有關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的框架有哪些

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如何實現賬號不能同時登陸”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

php
AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女