php限制帳號多登,php限制登錄次數

本文目錄一覽:

PHP實現一個賬號同一時間只能一人登陸,給出源代碼!

對於一個帳號在同一時間只能一個人登錄,可以通過下面的方法實現:

1 .在用戶登錄時,把用戶添加到一個ArrayList中

2 .再次登錄時查看ArrayList中有沒有該用戶,如果ArrayList中已經存在該用戶,則阻止其登錄

3 .當用戶退出時,需要從該ArrayList中刪除該用戶,這又分為三種情況

① 使用註銷按鈕正常退出

② 點擊瀏覽器關閉按鈕或者用Alt+F4退出,可以用javascript捕捉該頁面關閉事件,

執行一段java方法刪除ArrayList中的用戶

③ 非正常退出,比如客戶端系統崩潰或突然死機,可以採用隔一段時間session沒活動就刪除該session所對應的用戶來解決,這樣用戶需要等待一段時間之後就可以正常登錄。

在LoginAction中定義:

// 用來在服務器端存儲登錄的所有帳號

public static List logonAccounts;

login() 登錄方法中:

// 設置session不活動時間為30分

request.getSession().setMaxInactiveInterval(60*30);

if(logonAccounts==null){

logonAccounts = new ArrayList();

}

// 查看ArrayList中有沒有該用戶

for (int i = 0; i logonAccounts.size(); i++) {

Account existAccount = (Account)logonAccounts.get(i);

if(account.getAccountId().equals(existAccount.getAccountId())){

return “denied”;

}

}

// 在用戶登錄時,把sessionId添加到一個account對象中

// 在後面 ③ 需要根據此sessionId刪除相應用戶

account.setSessionId(request.getSession().getId());

// 該用戶保存到ArrayList靜態類變量中

logonAccounts.add(account);

return “login”;

① 使用註銷按鈕正常退出

logout() 退出方法中:

if(logonAccounts==null){

logonAccounts = new ArrayList();

}

// 刪除ArrayList中的用戶 ⑴

for (int i = 0; i logonAccounts.size(); i++) {

Account existAccount = (Account)logonAccounts.get(i);

if(account.getAccountId().equals(existAccount.getAccountId())){

logonAccounts.remove(account);

}

}

② 點擊瀏覽器關閉按鈕或者用Alt+F4退出:

在後台彈出一個窗口,在彈出窗口中刪除ArrayList中的用戶

function window.onbeforeunload(){

// 是否通過關閉按鈕或者用Alt+F4退出

// 如果為刷新觸發onbeforeunload事件,下面if語句不執行

if (event.clientXdocument.body.clientWidth event.clientY0||event.altKey){

window.open(‘accountUnbound.jsp’,”,

‘height=0,width=0,top=10000,left=10000’)

}

}

accountUnbound.jsp : 彈出窗口中刪除ArrayList中的用戶

%

Account account = (Account) request.getSession().getAttribute(“account”);

if(account != null){

if(LoginAction.logonAccounts==null){

LoginAction.logonAccounts = new ArrayList();

}

// 刪除ArrayList中的用戶——下面代碼和上面的 ⑴ 處一樣

for (int i = 0; i logonAccounts.size(); i++) {

Account existAccount = (Account)logonAccounts.get(i);

if(account.getAccountId().equals(existAccount.getAccountId())){

logonAccounts.remove(account);

}

}

}

%

為了保證上面代碼可以執行完畢,3秒後關閉此彈出窗口(也位於accountUnbound.jsp中)

script

setTimeout(“closeWindow();”,3000);

function closeWindow(){

window.close();

}

/script

③ 使LoginAction 實現implements HttpSessionListener,並實現sessionCreated,sessionDestroyed方法,在sessionDestroyed中刪除ArrayList中的用戶(用戶超過30分鐘不活動則執行此方法)

public void sessionDestroyed(HttpSessionEvent event) {

// 取得不活動時的sessionId,並根據其刪除相應logonAccounts中的用戶

String sessionId = event.getSession().getId();

for (int i = 0; i logonAccounts.size(); i++) {

Account existAccount = (Account)logonAccounts.get(i);

if(account.getSessionId().equals(existAccount.getSessionId())){

logonAccounts.remove(account);

}

}

}

註:

對於上面的,由於彈出窗口很容易被防火牆或者安全軟件阻攔,造成無法彈出窗口,從而短時間不能登錄,這種情況可以用AJAX來代替彈出窗口,同樣在後台執行刪除用戶的那段代碼,卻不會受到防火牆限制:

script

// ![CDATA[

var http_request = false;

function makeRequest(url) {

http_request = false;

if (window.XMLHttpRequest) { // Mozilla, Safari,…

http_request = new XMLHttpRequest();

if (http_request.overrideMimeType) {

http_request.overrideMimeType(‘text/xml’);

}

} else if (window.ActiveXObject) { // IE

try {

http_request = new ActiveXObject(“Msxml2.XMLHTTP”);

} catch (e) {

try {

http_request = new ActiveXObject(“Microsoft.XMLHTTP”);

} catch (e) {

}

}

}

if (!http_request) {

alert(‘Giving up :( Cannot create an XMLHTTP instance’);

return false;

}

http_request.onreadystatechange = alertContents;

http_request.open(‘GET’, url, true);

http_request.send(null);

}

function alertContents() {

if (http_request.readyState == 4) {

if (http_request.status == 200) {

window.close();

} else {

alert(‘There was a problem with the request.’);

}

}

}

function window. onbeforeunload() {

makeRequest (‘accountUnbound.jsp’);

}

//]]

/script

如何在PHP上限制一個IP一天只能註冊5個帳號

註冊的時候記錄IP地址。以後註冊則查詢該IP地址是否達到5個,達到5個則不允許註冊。這還不簡單呀!!

PHP代碼設置用戶登陸限制怎麼辦?

$_SESSION[‘num’] += 1; if($_SESSION[‘num’] = 3){此處操作數據庫 帳號狀態改為鎖定 並記錄當前鎖定時間。

if($_SESSION[$ip] 3){

if(isset($_POST[‘password’]) $_POST[‘password’] == ‘123456’){

$_SESSION[‘ok’] = 1;

$_SESSION[$ip] = 0;//登錄成功,IP登錄次數歸零

header(‘location:?’);}

if(!isset($_SESSION[‘ok’])){

$_SESSION[$ip] = $_SESSION[$ip] + 1;//累積登錄錯誤次數 exit(‘form method=”post”

password:input type=”password” name=”password” /input type=”submit” value=”login” /

/form’);}

// cookie保存時間,分鐘

$lifeTime = 1800;

setcookie(session_name(), session_id(), time() + $lifeTime, “/”);   }

else

{echo ‘你已經輸錯3次密碼,請等5分鐘再試試’;}

//獲取用戶真實IP

function getIp(){  $onlineip=”;

if(getenv(‘HTTP_CLIENT_IP’)strcasecmp(getenv(‘HTTP_CLIENT_IP’),’unknown’)){

$onlineip=getenv(‘HTTP_CLIENT_IP’); } elseif(getenv(‘HTTP_X_FORWARDED_FOR’)strcasecmp(getenv(‘HTTP_X_FORWARDED_FOR’),’unknown’)){

$onlineip=getenv(‘HTTP_X_FORWARDED_FOR’); } elseif(getenv(‘REMOTE_ADDR’)strcasecmp(getenv(‘REMOTE_ADDR’),’unknown’)){

$onlineip=getenv(‘REMOTE_ADDR’);  elseif(isset($_SERVER[‘REMOTE_ADDR’])$_SERVER[‘REMOTE_ADDR’]strcasecmp($_SERVER[‘REMOTE_ADDR’],’unknown’)){ $onlineip=$_SERVER[‘REMOTE_ADDR’]; } return $onlineip;

} ?通過SESSION和cookie可以簡單的就實現了。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/247194.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-12 13:19
下一篇 2024-12-12 13:19

相關推薦

  • PHP和Python哪個好找工作?

    PHP和Python都是非常流行的編程語言,它們被廣泛應用於不同領域的開發中。但是,在考慮擇業方向的時候,很多人都會有一個問題:PHP和Python哪個好找工作?這篇文章將從多個方…

    編程 2025-04-29
  • Python如何減少相同請求次數

    Python作為一種靈活的語言,經常用於處理網絡請求。但相同的請求被重複發出會導致一些問題,因此本文將介紹如何使用Python減少相同請求次數。 一、使用緩存 在應用程序中使用緩存…

    編程 2025-04-29
  • Python代碼實現迴文數最少操作次數

    本文將介紹如何使用Python解決一道經典的迴文數問題:給定一個數n,按照一定規則對它進行若干次操作,使得n成為迴文數,求最少的操作次數。 一、問題分析 首先,我們需要了解迴文數的…

    編程 2025-04-29
  • PHP怎麼接幣

    想要在自己的網站或應用中接受比特幣等加密貨幣的支付,就需要對該加密貨幣擁有一定的了解,並使用對應的API進行開發。本文將從多個方面詳細闡述如何使用PHP接受加密貨幣的支付。 一、環…

    編程 2025-04-29
  • 使用PHP foreach遍歷有相同屬性的值

    本篇文章將介紹如何使用PHP foreach遍歷具有相同屬性的值,並給出相應的代碼示例。 一、基礎概念 在講解如何使用PHP foreach遍歷有相同屬性的值之前,我們需要先了解幾…

    編程 2025-04-28
  • PHP獲取301跳轉後的地址

    本文將為大家介紹如何使用PHP獲取301跳轉後的地址。301重定向是什麼呢?當我們訪問一個網頁A,但是它已經被遷移到了另一個地址B,此時若服務器端做了301重定向,那麼你的瀏覽器在…

    編程 2025-04-27
  • PHP登錄頁面代碼實現

    本文將從多個方面詳細闡述如何使用PHP編寫一個簡單的登錄頁面。 1. PHP登錄頁面基本架構 在PHP登錄頁面中,需要包含HTML表單,用戶在表單中輸入賬號密碼等信息,提交表單後服…

    編程 2025-04-27
  • 如何在insightface中增加次數

    insightface是一個基於深度學習的人臉識別框架,其訓練的效果在很多場景下都相當出色。在使用insightface進行訓練時,我們通常需要對數據進行增強或擴展,以提高模型的效…

    編程 2025-04-27
  • PHP與Python的比較

    本文將會對PHP與Python進行比較和對比分析,包括語法特性、優缺點等方面。幫助讀者更好地理解和使用這兩種語言。 一、語法特性 PHP語法特性: <?php // 簡單的P…

    編程 2025-04-27
  • PHP版本管理工具phpenv詳解

    在PHP項目開發過程中,我們可能需要用到不同版本的PHP環境來試驗不同的功能或避免不同版本的兼容性問題。或者我們需要在同一台服務器上同時運行多個不同版本的PHP語言。但是每次手動安…

    編程 2025-04-24

發表回復

登錄後才能評論