2016-05-31 15 views
0

私は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
+0

ブラウザを閉じるとセッションが終了しません。 ColdFusionには、ブラウザが閉じられているかどうか、またはページの読み込みに長時間を要しているか、単にコンピュータから離れただけであるかどうかを知る方法がありません。 Pankajが指摘しているように、J2EEセッション変数では、ブラウザ(ブラウザのウィンドウで、タブではない)を再び開くと新しいセッションが得られますが、タイムアウトするまで古いセッションは残っています。 –

答えて

0

CF AdministratorでJ2EEセッションを有効にします(サーバーの設定>メモリ変数>の使用J2EEセッション変数)

ColdFusionセッション管理を使用している場合、クライアントがセッションタイムアウト期間中に非アクティブである場合、ColdFusionは自動的にセッションを終了し、すべてのセッションスコープ変数を削除します。ユーザーがブラウザを閉じると、セッションは終了しません。

J2EEセッション管理を使用する場合、ColdFusionはセッションを終了し、クライアントがセッションタイムアウト期間中に非アクティブである場合、すべてのセッションスコープ変数を削除します。ただし、ブラウザは同じセッションIDを送信し続け、ブラウザがアクティブなままである限り、このブラウザインスタンスとのセッションにこのIDを再利用します。

これをお読みくださいhttp://help.adobe.com/en_US/ColdFusion/9.0/Developing/WSc3ff6d0ea77859461172e0811cbec22c24-7c48.html#WSc3ff6d0ea77859461172e0811cbec22c24-7d2d

関連する問題