我有一个GAE CloudEndpoints项目,我在使用Java Sessions维护会话状态时遇到问题。以下是我到目前为止所做的事情:
首先,我在appengine-web.xml文件中启用了Sessions。
然后我创建了一个“登录对象”来保存useremail和密码。我也把它作为Serializable(因为我读到这是一个要求?)
@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class Session implements Serializable{
private static final long serialVersionUID = 4013168535563327001L;
@Persistent
String email;
@Persistent
String password;
public String getemail() {
return email;
}
public void setemail(String email) {
this.email = email;
}
public String getpassword() {
return password;
}
public void setpassword(String password) {
this.password = password;
}
}
然后我创建了一个控制器来创建会话并将登录对象作为属性存储在其中:
@ApiMethod(name="setLoginTest")
public Object setloginTest(HttpServletRequest request, User myLogin){
//Just setting some values into myLogin
//for production, this will compare submitted values against a DB.
myLogin.email = "Jason";
myLogin.password = "123";
//Creating the session object
HttpSession mySession = request.getSession(true);
//Trying to set an attribute that holds the login object
//(i.e. i want to store the username in the session)
mySession.setAttribute("loginObj", myLogin);
return myLogin;
}
如果我调用此端点,系统返回myLogin对象没问题,我知道mylogin对象的用户名为“jason”,pw为“123”
所以,最后一步,如果我创建端点,检查会话是否有一些用户数据或null。理想情况下,如果登录,我会采取一些措施,如果没有登录,则返回“未登录”消息。
@ApiMethod(name="getSessionTest")
public Object getSessionTest(HttpServletRequest request, User myLogin){
//getting the current session info
HttpSession mySession = request.getSession(false);
//Always returns NULL which is not right!!
return mySession.getAttribute("loginObj");
}
然而,麻烦的是“Getsessiontest”端点始终返回null。请帮忙!
答案 0 :(得分:1)
如果您正在运行Cloud Endpoints,为什么甚至需要服务器端的会话?您可以存储"会话"客户端的信息。如果您从Javascript客户端使用端点,则可以使用localstorage充当会话cookie。