日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > php >内容正文

php

php同个用户同时只能登陆一个, 后登陆者踢掉前登陆者

發(fā)布時間:2023/12/4 php 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php同个用户同时只能登陆一个, 后登陆者踢掉前登陆者 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

? php同個用戶同時只能登陸一個, 后登陸者踢掉前登陸者php同個用戶同時只能登陸一個, 后登陸者踢掉前登陸者

通常用戶登陸,如果沒有特別的限定, 同一個用戶可以同時登陸, 今天搞了一個東西限定一個用戶不能同時登陸到一個系統(tǒng)上, 后登陸者會把前面登陸的踢出來.(有點像QQ,同個帳號不能在多個地方同時在線, 后面登陸成功后就把前面登陸的掉線)
SQL : 兩張表,一張是用戶信息,另一張用來保存session
[code]?
--
-- 數(shù)據(jù)庫: `single_user`
--
CREATE TABLE IF NOT EXISTS `session` (
??`username` varchar(50) default '',
??`time` varchar(14) default '',
??`session_id` varchar(200) NOT NULL default '0',
??`userid` int(11) default '0',
??PRIMARY KEY??(`session_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

CREATE TABLE IF NOT EXISTS `users` (
??`userid` int(11) NOT NULL auto_increment,
??`username` varchar(255) NOT NULL,
??`password` varchar(255) NOT NULL,
??PRIMARY KEY??(`userid`)
) ENGINE=MyISAM??DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ;
[/code]

數(shù)據(jù)表 session 以session_id 為主鍵, 這個主鍵是 userid + user name + user login time 的 md5值算出來的. 每次用戶登陸的時候就會像session表里插入一條,同時以userid username為條件查詢舊的session記錄并且刪除他,所以當(dāng)頁面判斷當(dāng)前用戶是否有效時,是通過$_SESSION數(shù)組里面保存在session_id值和數(shù)據(jù)庫里取出來的session_id進行比較, 舊的session_id 在此用戶第2次登陸時已經(jīng)被刪除,因此找不到,從而被退出系統(tǒng).
代碼部分
1.config.php 一些簡單的配置,包括數(shù)據(jù)庫的連接
[code]<?php
$live_site = 'testing';
$session_life = 600;
function getConnect()
{
$db_local = 'localhost';
$db_user = 'root';
$db_pwd = '';
$db_name = 'single_user';

$db_link = mysql_connect($db_local, $db_user, $db_pwd);
$rs = mysql_select_db($db_name, $db_link);
if ($rs)
{
return $db_link;
}
return false;
}
?>
[/code]
2. index.php 登陸頁面[code]?
<?php
require_once('config.php');
$db = getConnect();
if (isset($_POST['username']) && isset($_POST['password']))
{
? ? //處理用戶登陸后的數(shù)據(jù)驗證
? ? $query = 'SELECT * FROM `users` WHERE `username`="' . trim($_POST['username']) . '" AND `password`="' .md5( trim( $_POST['password'] ) ) . '"';
? ? $result = mysql_query($query, $db);
? ? $rs_num = mysql_num_rows($result);
? ? if ($rs_num > 0 )
? ? {
? ?? ???//該用戶存在
? ?? ???$row = mysql_fetch_assoc($result);
? ?? ???$userid = $row['userid'];
? ?? ???$username = $row['username'];
? ?? ???$logintime = time();
? ??
? ?? ???//創(chuàng)建session_id值? ??
? ?? ???$session_id = md5( $userid . $username . $logintime );
? ?? ???
? ?? ???//登陸成功后要插入一條記錄到session表中
? ?? ???$sql = 'INSERT INTO session SET `time`="'.$logintime.'", `session_id`="'.$session_id.'", `userid`='.$userid.', `username`="'.$username.'"';
? ?? ???mysql_query($sql, $db);
? ?? ???
? ?? ???//并且要把session表里舊的session_id刪除掉
? ?? ???$query = 'DELETE FROM `session` WHERE `userid`=' . $userid . ' AND `username`="' . $username . '" AND `session_id`!="' . $session_id . '"';
? ?? ???$old_session = mysql_query($query);

? ?? ???//開啟session, 把新登陸的用戶信息進入$_SESSION中
? ?? ???session_name( md5( $live_site ) );
? ? session_id( $session_id );
? ? session_start();

? ?? ???$_SESSION['session_id'] = $session_id;
? ?? ???$_SESSION['userid'] = $row['userid'];
? ?? ???$_SESSION['username'] = $row['username'];
? ?? ???$_SESSION['logintime'] = $logintime;
? ?? ???session_write_close();
? ?? ???echo '<script type="text/javascript">window.location.href="index2.php"</script>';
? ? } else {
? ?? ???echo '<script type="text/javascript">window.location.href="index.php?mosmsg=Username Error"</script>';
? ? }
} else {
? ? //用戶登陸框
? ? ?>
? ? <form method="post" name="user_login" id="user_login" action="index.php">
? ? Username:<input type="text" name="username" id="username" value=""/>
? ? <br />
? ? password:<input type="password" name="password" id="password" value=""/>
? ? <br />
? ? <input type="submit" name="submit" id="submit" value="Submit"/>
? ? </form>
<?php
}
?>
[/code]
3. index2.php 用戶成功登陸后需要處理原來上一次該用戶的session信息, 如果上一次此用戶的登陸信息還有效,需要將其刪除
[code]?
<?php
require_once('config.php');
$db = getConnect();
session_name( md5( $live_site ) );
session_start();

$userid = $_SESSION['userid'];
$username = $_SESSION['username'];
$logintime = $_SESSION['logintime'];
$session_id = $_SESSION['session_id'];

//判斷用戶是否有登陸
if ($session_id != session_id()) {
? ? echo "<script>document.location.href='index.php?mosmsg=Invalid Session'</script>\n";
? ? exit();
}
if ($session_id == md5( $userid . $username . $logintime )) {
? ? $past = time() - $session_life;
? ??
? ? //刪除已經(jīng)超時但是記錄還存在的記錄
? ? $query = "DELETE FROM session"
? ?? ???. "\n WHERE time < '" . (int) $past . "'"
? ?? ???. "\n AND userid <> 0"
? ?? ???;
? ? mysql_query($query);
? ? $current_time? ? = time();
? ? // update session timestamp 更新登陸用戶的時間戳
? ? $query = 'UPDATE #__session'
? ?? ???. '\n SET time="' .??$current_time . '"'
? ?? ?? ?? ?. '\n WHERE session_id = "' . $session_id . '"';
? ??
? ? //以當(dāng)前用戶登陸后產(chǎn)生的$session_id 來查詢 session表里的記錄是否存在
? ? //如果不存在那么就跳到登陸頁面
? ? $query = "SELECT COUNT( session_id )"
? ?? ?? ?? ?. "\n FROM session"
? ?? ?? ?? ?. "\n WHERE session_id = '" .??$session_id . "'"
? ?? ?? ?? ?. "\n AND username = '". $username . "'"
? ?? ?? ?? ?. "\n AND userid = ". $userid;
? ? $session_rs = mysql_query($query);
? ? $session_row = mysql_fetch_row($session_rs);
? ? $session_num = $session_row[0];
? ? if ($session_num > 0 )
? ? {
? ?? ???echo 'WELCOME<br / ><a href="logout.php">Logout</a>';
? ? } else {
? ?? ???echo "<script>document.location.href='index.php?mosmsg=Admin Session Expired'</script>\n";
? ? }
} else {
? ? // session id does not correspond to required session format
? ? echo "<script>document.location.href='index.php?mosmsg=Invalid Session'</script>\n";
? ? exit();
}
?>
[/code]

4. logout.php 退出用戶,并且刪除 SESSION
[code]?
<?php
require_once('config.php');
$db = getConnect();
session_name( md5( $live_site ) );
session_start();

$userid = $_SESSION['userid'];
$username = $_SESSION['username'];
$logintime = $_SESSION['logintime'];
$session_id = $_SESSION['session_id'];

$sql = 'DELETE FROM session WHERE userid='.$userid.' AND username="'.$username.'" AND session_id = "'.$session_id.'"';
mysql_query($sql);
session_destroy();
echo "<script>document.location.href='index.php'</script>\n";
exit();
?>
[/code]

轉(zhuǎn)載于:https://blog.51cto.com/1875281/944760

總結(jié)

以上是生活随笔為你收集整理的php同个用户同时只能登陆一个, 后登陆者踢掉前登陆者的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。