簡體   English   中英

如何處理Google App Engine中的會話?

[英]How to deal with Sessions in Google App Engine?

我在servlet中成功創建了會話,我可以獲得jsp的會話/會話屬性,但不能在端點類中獲取。 我想在端點類中獲取會話信息。 請幫我解決一下這個。

我在eclipse中使用maven,我在appengine-web.xml中啟用了會話

我讀了一篇關於這個的文章 ,除了如何啟用會話我什么都不懂。

該servlet用於檢查是否已存在會話

public class FirstServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public FirstServlet () {
    super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    service(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    service(request, response);
}
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    response.setContentType("text/html");
    HttpSession session=request.getSession(false);
    if (session != null) {
        String name = session.getAttribute("name");
        // do something
    } else {
        // do something
    }

}
}

如果沒有session,則使用此servlet創建會話

public class SeccondServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public SeccondServlet() {
    super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    service(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    service(request, response);
}

@Override

protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    response.setContentType("text/html");
    request.getRequestDispatcher("login.html").include(request, response);  
    String name = request.getParameter("name"); 
    HttpSession session=request.getSession();
    session.setAttribute("name", name);
    // do something 
}
}

這是我的端點api類(Google Cloud Endpoints)

@Api(
    name = "myapi",
    version = "v1",
    clientIds = "given client ids")
public class MyApi{
    @ApiMethod(name = "name", path = "name", httpMethod = "post")
    public List<String> getUser( HttpServletRequest servletReq) {
        HttpSession session = servletReq.getSession(false);
        List<String> name= new ArrayList<String>();
        if(session == null) {
            userName.add("no Name");
        } else {
            name.add((String)session.getAttribute("name"));
        }

       return name;
    }

我仍然得到“沒有名字”的結果,即使我創建了會話,我可以得到會話屬性,這里“名稱”

假設您了解HttpSessions(如果不是,它只是在服務器和客戶端之間交換cookie以便處理登錄用戶)

因此,所有與用戶相關或任何其他會話相關信息都存儲在服務器端,並且表示信息的會話Id將作為cookie發送到客戶端,並且客戶端將在每個http請求上將其發回。

AppEngine使用數據存儲來存儲會話信息和內存緩存,以便更快地訪問

您可以使用在每個http請求中注入的標准HttpSession對象來訪問會話數據

訪問此HttpSession的代碼在您使用的框架中有所不同,如果您希望我可以使用特定的代碼片段來幫助更好地理解它

更新:

如果您正在使用servlet,那么訪問會話將如下所示

public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private final String userID = "Pankaj";
private final String password = "journaldev";

protected void doPost(HttpServletRequest request,
        HttpServletResponse response) {
  HttpSession session=request.getSession();
  // access any value
  User user = (User)session.getAttribute("loggedInUser");
}

谷歌雲終端使用它如下所示

@ApiMethod
public Response getUser( HttpServletRequest servletReq) {
    HttpSession session = servletReq.getSession();
    session.getAttribute("loggedInUser");
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM