0

ユーザーが自分の ColdFusion アプリケーションに同時に複数回アクセスできないようにしたいと考えています。

dtLogin、dtLogLastUpdate、ip、および isLogged を含む SQL テーブルがあります。

ロジックは次のとおりです。

セッション タイムアウトは 1 時間です。

ユーザーがログインすると、

  • dtLogin = 日付スタンプを今すぐ設定
  • dtLogLastUpdate = 現在の日付スタンプ
  • ip = ユーザー ip
  • isLogged = 1

AJAX 呼び出しを使用しdtLogLastUpdateて 1 分ごとに更新しています。

ユーザーのログイン要求を受け取ったら、isLogged0 または dtLogLastUpdate過去のセッション タイムアウトを超えている場合にのみ許可します。

ユーザーがブラウザを閉じてもログアウトしない場合、どのように管理すればよいですか? セッションがタイムアウトするまで待つ必要がありますか?

4

1 に答える 1

2

currentUsersというアプリケーション変数を作成します。

配列またはリストを使用できます。配列関数の方が高速だと思いますが、ColdFusionのバージョンによっては、配列の検索が面倒になる場合があります。簡単にするためにリスト関数を使用します。

ユーザーがログインしようとするときは、リストでユーザー名を確認してください。そこにない場合は、ユーザー名をリストに追加してログインできるようにします。ユーザー名が存在する場合は、デフォルトの「ひどい、とても悲しい」ランディングページに送信します。

<cfif listFindNoCase(application.currentUsers, form.userName)> 
    <cflocation url = "shameOnYou.cfm">
<cfelse>
    <cfset listAppend(application.currentUsers, form.userName)>
    <cfset session.whatever>
</cfif>

application.cfcで、onSessionEndを使用してリストからユーザー名を削除します。

<cffunction onSessionEnd...>
    <cfset listDeleteAt(application.currentUsers,listFind(application.currentUsers, session.userName))>
</cffunction>

これの利点は、AJAXを使用してログファイルを60秒ごとに更新する必要がないため、バックグラウンドプロセスが削減されることです。

于 2013-03-06T22:10:31.480 に答える