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

时间:2013-04-11 11:36:42

标签: servlets smalltalk visualworks

我想知道我在这里可能会缺少什么。

我有一个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。所以下一个(第三个)请求将启动一个新会话,因为它在cookieName中没有webRequest ,它将使用新的会话密钥设置cookieName,该会话密钥也将保留在第四个会话中。

这是预期的行为,所以我错过了什么?或者它可以以不同的方式完成,以便这种行为不会发生?

setSessionKey

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

期待smalltalk gurus在这里帮助我。

先谢谢。

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

0 个答案:

没有答案