Servlets 同一客户端(HttpClient)的会话密钥更改

Servlets 同一客户端(HttpClient)的会话密钥更改,servlets,smalltalk,visualworks,Servlets,Smalltalk,Visualworks,我正试图找出我在这里可能遗漏了什么 我有一个Servlet TestServlet Smalltalk defineClass: #TestServlet superclass: #{VisualWave.HttpServlet} indexedType: #none private: false instanceVariableNames: '' classInstanceVariableNames: '' imports: '' cat

我正试图找出我在这里可能遗漏了什么

我有一个Servlet 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
不会有名为
cookieName
的cookie,因此它会设置cookie。 稍后在第二个请求
webRequest
中有一个cookie名称,因此它不会设置cookie。因此下一个(第三个)请求将启动一个新会话,并且由于它不会在
webRequest
中有
cookieName
,它将使用新会话密钥设置cookieName,该密钥也将保留在第四个会话中

这是预期的行为吗?我是否遗漏了什么?或者可以用另一种方式来避免这种行为发生

setSessionKey

    self session
        ifNotNil: 
            [| cookieName |
            cookieName := webRequest webSite sessionCookieName.
            (webRequest cookieValueAt: cookieName)
                ifNil: [self cookieAt: cookieName put: self session key]]
期待smalltalk大师在这里帮助我

提前谢谢

PS:我知道我们可以将会话cookie设置为响应,但我正在寻找不同的解决方案,或者可能是更正确的解决方案。我也想知道发生这种情况的原因。谢谢