ColdFusion ログイン ページと Application.cfc ファイルを作成しました。正常に動作しているように見えますが、修正できないバグや穴が見つかりました。
その 3 ページのフォーム: ログイン ページ。日付の選択やその他の質問がある検索ページ。そして出力ページ。ユーザーがログインし、認証されます。ルックアップ ページでセッションが期限切れになった場合、ユーザーがクエリを送信しようとすると、ログイン ページに戻されます。ただし、セッションの有効期限が切れた場合、検索ページを更新するだけでログイン ページを回避できます。
どうすればこれを防ぐことができますか? コードのどこが間違っていますか? そのルックアップ ページを更新すると、ログイン ページにも誘導されるようにしたいと思います。
<cfcomponent>
<cfset This.name = "TEST_login">
<cfset This.Sessionmanagement="True">
<cfset This.loginstorage="session">
<cfset This.sessionTimeout= CreateTimespan(0,0,1,0) />
<cferror TYPE="exception" TEMPLATE="error.cfm" MAILTO="email address">
<cffunction name="onSessionStart">
<cfset session.loggedIn = false>
</cffunction>
<cffunction name="OnRequestStart">
<cfargument name = "request" required="true"/>
<cfif IsDefined("Form.logout")>
<cflogout>
</cfif>
<cflogin idletimeout="1200">
<cfif NOT IsDefined("cflogin")>
<cfinclude template="acc_hgrant_login.cfm">
<cfabort>
<cfelse>
<cfif cflogin.name IS "" OR cflogin.password IS "">
<cfinclude template="acc_hgrant_login2.cfm">
<cfabort>
<cfelse>
<cfquery name="loginQuery" dataSource="cfsource">
SELECT username, role
FROM users
WHERE
username = '#cflogin.name#'
AND password = '#cflogin.password#'
</cfquery>
<cfif loginQuery.role EQ "admin">
<cfloginuser name="#cflogin.name#" Password = "#cflogin.password#"
roles="#loginQuery.role#">
<cfset Session.isLoggedIn = "Yes">
<cfelse>
<cfinclude template="login3.cfm">
<cfabort>
</cfif>
</cfif>
</cfif>
</cflogin>
</cffunction>
</cfcomponent>
後続の各ページで追加します
<cfif not isDefined("Session.isLoggedIn")>
各ページの上部にあります。
ただし、繰り返しますが、一定期間後に 2 ページ目をリロードするだけで、セッションが期限切れになった後でもセッションが再開されます。
ありがとう。