ここで何が欠けているのかを理解しようとしています。
私はサーブレット 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 番目のリクエストの後半にはwebRequest
Cookie 名があるため、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 に設定できることはわかっていますが、別の解決策を探しているか、より正しい解決策を探しています。また、これが発生する理由を知りたいと思います。ありがとうございます。