2012-12-26 62 views
-2

我有一個GWTapplication。 我想通過我的會話ID而不使用cookie。你能幫我寫客戶端和服務器代碼來做到這一點嗎?如何通過付費http的會話

過程是 1)將用戶連接 2)所述服務器生成的會話ID,併發送回客戶端 3)用戶正與一個會話ID進行連接,然後調用一個fonction在服務器上,如何將此會話ID傳遞給rpc調用(在客戶端),然後在服務器端如何恢復會話?

謝謝您的回答

回答

1

每當servlet的執行session.getSession()或session.getSession(真)代碼的servlet,它會爲用戶創建一個會話。

因此,根據它,服務器通知瀏覽器,並且它將創建一個JSESSIONID,如果您不想從客戶端獲取該cookie並想要禁用某項功能而不是在服務器上啓用HttpOnly屬性。

啓用HttpOnly屬性後,您不再需要從瀏覽器獲取會話ID信息。現在,您必須對服務器進行RPC調用以獲取會話標識。


客戶端代碼:

sessionService.getSessionServer(new AsyncCallback<String>() { 
          public void onFailure(Throwable caught) { 
           // Show the RPC error message to the user 
          } 
          public void onSuccess(String sessionId){ 
           Window.alert("sessionId->"+sessionId); 
          } 
         }); 

SessionServiceImpl代碼:

public class SessionServiceImpl extends RemoteServiceServlet implements 
     SessionService { 

    public String getSessionServer(String input) throws IllegalArgumentException { 
     HttpServletRequest request = this.getThreadLocalRequest();  
     HttpSession session = request.getSession(); //or request.getSession(true); 
     return session.getId(); 
     } 
+0

客戶端:什麼是gwt代碼來獲得從服務器傳遞的會話?然後將這個會話ID放到一個rpc調用中的代碼是什麼? – user1810503

+0

您是否編寫了任何代碼來實現它?你正在使用MVP或核心GWT結構? – NFE

+0

查看更新的答案。 – NFE

0

讓您的Web服務器上的會話。然後在您的服務servlet請求中,您可以:

HttpSession session = request.getSession(); 
String id = session.getId(); 

請注意,您可以向會話添加更多屬性。例如,當您驗證用戶,你可以記下用戶對象或認證呼叫的用戶ID給您的會話:

session.setAttribute("user", user); 

然後在所有後續調用,你可以驗證該屬性在處理之前是正確的。如果沒有,你可以拋出一個異常讓你的GWT客戶知道有什麼問題。然後客戶端可以將用戶重定向到登錄頁面或者提供用戶重新加載應用程序。例如:

if (session == null || session.getAttribute("user") == null) { 
    throw new LoginException(); 
}