在GAE / J中使用会话

时间:2011-03-29 06:03:03

标签: java google-app-engine session

我很难拼凑出关于这个主题的各种线索,所以我很想知道在我走得太远之前我是否走在正确的轨道上。我正在尝试使用会话和cookie等进行持久登录。在这一点上,我觉得我已经掌握了登录序列,现在我只有一个用户数据库,但我会在以后尝试解决OAuth问题。

登录:

  1. 用户输入凭据
  2. 将信用卡异步发送到服务器(最好通过SSL,最终)
  3. 永远不会存储密码,只保留哈希
  4. 如果信誉良好,服务器会发送this.getThreadLocalRequest().getSession().getId()的值
  5. 回调方法将sessionID保存在cookie中并相应地修改UI
  6. (注销方法清除cookie并调用this.getThreadLocalRequest().getSession().invalidate()
  7. 当我希望用户能够回来并在不必重新登录的情况下从他们离开的地方回来时,我迷路了。我从cookie中获取了sessionID(如果有的话),然后我不知何故需要请求服务器验证它是否有效。是否有一种方法可以获取会话ID并返回它是否是有效会话?或者以某种方式告诉当前会话使用该ID?

    最终目标是我希望在RPC调用中包含应限制为登录用户的会话ID,服务器端方法将在运行之前验证RPC接收的sid。我不需要保留有效sid的运行列表,对吧?这已经由GAE处理了(是的,我设置了<sessions-enabled>

2 个答案:

答案 0 :(得分:1)

getSession返回一个会话对象,该对象可用于跨请求的持久存储。它已经使用cookie来保持请求之间的会话ID。您无需获取会话ID并将其单独存储在另一个cookie中。

如果要将数据与数据库中的用户相关联,请将其与会话ID相关联(例如,在实体中包含ID并按ID查找)如果您希望将其范围限定为当前会话,或将其与用户ID相关联。

除非你有一个真正,非常令人信服的理由发明自己的用户管理,但你真的应该使用内置的Google帐户或OpenID支持。您不是通过强迫用户为您的网站创建另一个帐户来为您的用户提供服务。

答案 1 :(得分:0)

this.getThreadLocalRequest().getSession(false)

返回与此请求相关联的当前HttpSession,如果没有有效null,则返回HttpSession