2

良い一日、

私たちはColdfusion8にAPIを実装しようとしています。これにより、Cookieは使用されません。代わりに、リクエストごとにGETまたはPOSTによってcfid、cftoken、およびjsessionidを渡します。

mach-iiとそのSessionFacadeを使用しています。これについてさらに情報が必要かどうかはわかりません。もしそうなら、言及してください。

Coldfusion Administratorでは、クライアント変数が「レジストリ」に設定され、「J2EEセッション変数の使用、アプリケーション変数の有効化、セッション変数の有効化」ごとにメモリ変数がチェックされます。

私のApplication.cfc疑似コンストラクターは次のようになります

<cfset this.name = "#cgi.server_name#" />
<cfset this.loginStorage = "session" />
<cfset this.sessionManagement = true />
<cfset this.setClientCookies = false />
<cfset this.setDomainCookies = false />
<cfset this.sessionTimeOut = CreateTimeSpan(0,1,0,0) />
<cfset this.applicationTimeOut = CreateTimeSpan(0,1,0,0) />

onSessionStartまたはonSessionEndには何もありません。

セッションを検証するために、プラグインを使用しており、そのpreProcessメソッドには次のものがあります。

if (not getSessionFacade().has("authUserLoggedIn")){
    arguments.eventContext.clearEventQueue();
    arguments.eventContext.announceEvent("nologin", newEventArgs);
}

私が最初に理解していないのは、J2EEセッションを使用するときにcfidとcftokenを送信する必要がある状況はあるかということだと思います。または、jsessionidは完全に完全にそれらの機能を置き換えますか?

次に、この1つのアプリケーション(サーバー全体ではなく)がCookieを送信しないようにします。Application.cfcで、Cookieを無効に設定していますが、それでもjsessionidを含むCookieを送信しようとします。

これは私が奇妙な副作用だと思うものを持っています:

Cookieが無効になっているFirefoxでは、URLに入力されたcfid、cftoken、およびjsessionidがセッション状態を正しく維持します。

ただし、Cookieを受け入れるiPhoneアプリでも使用しました。Cookieをローカルストレージに保存して修正する前に、アプリを閉じて再度開くと、Cookieが失われました。まだ有効なcfid、cftoken、およびjsessionidがURLで送信されていたにもかかわらず、「ログインしていません」というエラーが発生しました。

だから私は3つの質問があります:

まず、J2EEセッションを使用する場合、cfidとcftokenを保存して再送信する必要がある状況はありますか?

次に、Cookieを使用せずにjsessionidを手動で保存するために使用できるアプリケーションレベルの設定はありますか?

第三に、どの段階でjsessionidが取得され、セッション変数がメモリから入力されますか?これは私がデバッグまたは問い合わせることができるものですか、それで私は何かを言うことができます

if jsessionid refers to a current, valid session {
    ...
}
4

2 に答える 2

4

この設定:

<cfset this.setClientCookies = false /> 

クライアントCookie(cfid / cftoken)が設定されないようにします。これは、セッション管理ではなく、クライアント管理と関係があります。プロパティにclientManagement値を設定していないため、デフォルトでtrueに設定されている可能性があります。つまり、これらの値は作成されていますが、Cookieとして設定されていません。それらをURLで渡さない場合(私は今cfid / cftokenについて話している)、それらをたくさん作成している可能性があります。レジストリを確認してください:)そして、原則として、それらを使用していない場合は、clientmanagementをfalseに設定してください。

jsessionidがある場合でも、CFIDとCFTOKENがクライアント変数に使用されます。有効。ただし、jsessionIDを使用する場合は、セッションに必要ありません。

私が知っているアプリのプロパティには、setClientCookiesに相当するものはありません。論理的には、これらの変数をきめ細かく制御できるように、「setSessionCookies=」が表示されることを期待しています。しかし、そうではありません。CFが基盤となるj2eeセッションアーキテクチャを利用していることが原因である可能性があります。これは、内部で行われている方法ですしかし、私を引用しないでください。

ただし、なぜjsessionIDをトラップしないのか疑問に思います。onSessionStart()で、必要に応じてURLに渡します。クッキーが設定されている可能性があります-または、関連するプラットフォームやクライアントに基づいていない可能性があります...しかし、URLにそれがある限り、あなたは正しいですか?

于 2012-04-26T13:21:31.163 に答える
1

この設定:

<cfset this.setClientCookies = false /> 

CFID&CFTOKENまたはJSESSIONIDCookieを設定します。これらはクライアントとセッションに使用されます!したがって、これをfalseに設定し、リクエストURLにCFID / CFTOKENまたはJSESSIONIDを含めない場合、セッション管理を使用できません。

于 2013-06-24T22:53:31.363 に答える