私はColdFusion 10のセッションに問題があります。私はCF 8からCF10にサイトを移動しました。 CF8は別のサーバーにあります。私はWriteOutput(" testing")
をApplication.cfcのonSessionStart
機能に入れて、サイトがどのように動作するかを知っています。私はサイトを走らせ、デフォルトのページで出力 "テスト"が現れた。 SignInページをクリックすると、「テスト」という単語が再び表示されました。それはonSessionの開始を呼び出しています。私のonSessionStartの内容は次のとおりです。すべてのリクエストに対する新しいセッション
<cfscript>
this.name="mysite";
this.clientmanagement=false;
this.sessionmanagement=true;
this.setclientcookies=false;
this.sessiontimeout="#CreateTimeSpan(0,0,40,0)#";//TODO: revert back to 40 mins as default
this.applicationtimeout="#CreateTimeSpan(0,1,0,0)#";
this.loginStorage = "Session";
this.logFile = "mysite_LOG";
this.scriptProtect = "all";
</cfscript>
<cffunction name="onSessionStart" returntype="void">
<cfif NOT StructKeyExists(cookie,"CFID") OR NOT StructKeyExists(cookie,"CFTOKEN")>
<cfheader name="Set-Cookie" value="CFID=#session.CFID#; Expires=#GetHttpTimeString(DateAdd("yyyy", 40, Now()))#; Path=/;SECURE;HTTPOnly;">
<cfheader name="Set-Cookie" value="CFToken=#session.CFToken#; Expires=#GetHttpTimeString(DateAdd("yyyy", 40, Now()))#; Path=/;SECURE;HTTPOnly;">
</cfif>
<cfscript>
WriteOutput("testing");
StructClear(session);
session.pageRedirector = ""; //used for sending a user back to a previous requested page when authentication is required first
session.profile = CreateObject("component","mysite.cfcs.user");
session.shoppingCart = CreateObject("component","mysite.cfcs.cart");
session.catalog = CreateObject("component","mysite.cfcs.catalog");
</cfscript>
</cffunction>
私はページを検証するためにCSRFGenerateToken()
を使用しているため、アプリケーションはonSessionStartを呼び出すし続けた場合、セッションは常にクリアされ、ユーザーがログインすることができませんでした。
setClientCookies
をfalseに設定すると、すべての要求に対してonSessionStartが呼び出されます。
問題を解決するために、setclientcookies
をtrueに設定しました。セッションが失われた問題は解決されましたが、ブラウザの終了時にセッションが終了しないという新しい問題が発生しました。
誰かがいくつかのアイデアを与えることができれば、私は深く感謝します。
- IISのバージョンである= IIS 8.5
- OSのバージョン=勝利サーバー2012 R2
ブラウザを閉じるとセッションが終了しません。 ColdFusionには、ブラウザが閉じられているかどうか、またはページの読み込みに長時間を要しているか、単にコンピュータから離れただけであるかどうかを知る方法がありません。 Pankajが指摘しているように、J2EEセッション変数では、ブラウザ(ブラウザのウィンドウで、タブではない)を再び開くと新しいセッションが得られますが、タイムアウトするまで古いセッションは残っています。 –