1

ここで何が欠けているのかを理解しようとしています。

私はサーブレット TestServlet を持っています。

Smalltalk defineClass: #TestServlet
    superclass: #{VisualWave.HttpServlet}
    indexedType: #none
    private: false
    instanceVariableNames: ''
    classInstanceVariableNames: ''
    imports: ''
    category: ''

getメソッドを使用:

doGet: aRequest response: aResponse

    aResponse write: aRequest session key

これでワークスペースコードを実行します

client := HttpClient new.
    Transcript
        show: (client executeRequest: (HttpRequest
                            get: 'http://localhost:8008/servlet/TestServlet'))
                    value value;
        cr.
    Transcript
        show: (client executeRequest: (HttpRequest
                            get: 'http://localhost:8008/servlet/TestServlet'))
                    value value;
        cr.
    Transcript
        show: (client executeRequest: (HttpRequest
                            get: 'http://localhost:8008/servlet/TestServlet'))
                    value value;
        cr.
    Transcript
        show: (client executeRequest: (HttpRequest
                            get: 'http://localhost:8008/servlet/TestServlet'))
                    value value;
        cr

ここでは、3 番目のリクエストごとに異なるセッション キーが取得されます。

私がデバッグしたとき、メソッド Response => setSessionKey webRequest に という名前の Cookie がないことがわかったcookieNameので、Cookie を設定します。2 番目のリクエストの後半にはwebRequestCookie 名があるため、Cookie は設定されません。したがって、次の (3 番目の) リクエストは新しいセッションを開始しcookieNameますwebRequest。 4回目のセッションも。

これは予想される動作なので、何か不足していますか? または、この動作が発生しないように別の方法で行うことはできますか?

setSessionKey

    self session
        ifNotNil: 
            [| cookieName |
            cookieName := webRequest webSite sessionCookieName.
            (webRequest cookieValueAt: cookieName)
                ifNil: [self cookieAt: cookieName put: self session key]]

ここで私を助けてくれる smalltalk の達人を楽しみにしています。

前もって感謝します。

PS: セッション Cookie を response に設定できることはわかっていますが、別の解決策を探しているか、より正しい解決策を探しています。また、これが発生する理由を知りたいと思います。ありがとうございます。

4

0 に答える 0