2010-08-02 87 views
1

我將會話參數存儲在Struts2會話映射中,該會話映射使用SessionAware接口在我的操作中獲得。我的應用程序位於/ MyApp路徑中。Struts2:會話問題(反向代理之後)

與逆代理重定向,使URL http://www.appdomain.com/點到我的本地的Tomcat建立一個Apache服務器上的應用Struts2的本地主機後:8080/MyApp的,Struts2的會話處理不工作了。我預計會話cookie被存儲爲Struts2上下文http://localhost:8080/MyApp而不是http://www.appdomain.com/ ...

在Struts2配置中是否有解決方案?或以某種方式以編程方式更改會話cookie?在interwebs或官方文檔中找不到關於此的任何信息。請幫忙,我已經在製作中,我的登錄不起作用;-)

+0

您是否嘗試過URL重寫以將會話ID獲取到URL中? – Pat 2010-08-02 19:17:50

+0

不是真的,但那不是我想做的事情(漂亮的網址儘可能好)。 在這兩者之間,我發現由Struts2設置的會話cookie僅對http://www.appdomain.com/MyApp有效......我需要一種改變設置此命名空間的struts2行爲的方式。 – Akku 2010-08-03 06:29:11

+0

好吧,我已經嘗試將用戶的JSESSIONID cookie設置爲sessionId,但發現仍然該servlet不會讓我這樣做。 現在我試圖通過JavaScript來設置它,但我似乎沒有得到那個工作: -/ – Akku 2010-08-03 10:58:40

回答

1

我剛剛解決了一個骯髒的黑客問題:我將Session Id傳遞給了JSP,並使用JavaScript來設置所需的JSESSIONID cookie客戶端。

function createCookie(name,value,days){ if(days){ var date = new Date(); date.setTime(date.getTime()+(days * 24 * 60 * 60 * 1000)); var expires =「; expires =」+ date.toGMTString(); } else var expires =「」; document.cookie = name +「=」+ value + expires +「; path = /」; }

$(文件)。就緒(函數(){ 的createCookie( 「JSESSIONID」, 「」,3); });

得到了這個頁面的JS代碼:http://www.quirksmode.org/js/cookies.html

謝謝,問題解決了!

最好的問候, 添

+0

我接受了我的答案,因爲沒有其他答案似乎進來。反正,我會很高興聽到還是更好的解決方案。 – Akku 2011-04-13 06:59:30

1

這是舊的,但我發現它,並希望將我的5美分。您可以使用

一個解決方法是編輯web.xml和會話配置設置是這樣的:

<session-config> 
    <session-timeout>10</session-timeout> 
    <cookie-config> 
     <name>MYAPPSESSIONID</name> 
     <path>/</path> 
    </cookie-config> 
</session-config> 

這改變

  • 從JSESSIONID SessionID的cookie來MYAPPSESSIONID如此它不會與可能在同一代理中公開的其他應用相沖突
  • Cookie應用的路徑。所以它會一直髮送到服務器

希望這可以幫助其他人。