-
解决Android的session问题
普通类 -
- 支持
- 批判
- 提问
- 解释
- 补充
- 删除
-
-
浏览器中的session存储
当我们登录一个网站时,一个session就启用了,在我们的浏览器端有一个唯一的cookie标识符与之匹配。直至我们退出登录或者关闭浏览器,session才会消失,在此期间,我们的一些信息将保存在session中。
-
Android客户端解决session的存储问题
不幸的是,当我们使用android中的控件进行开发时却往往无法保存session信息,原因就是(这是我自己的猜测,不对的话大家可以批评指正)控件中无法保存类似cookie的标识符。
以学习元为例,在action中得到当前用户的代码为:User user = SessionManager.getInstance().getUser(request.getSession());,可是如果不加处理,通过客户端访问的话request.getSession()值为null。
为了解决这个问题,我上网查找了一些资料,具体解决思路如下:
首先,要自己写一个继承HttpSessionListener方法的类用来监控session的改变状态,并将其路径在web.xml中注册。该类的代码如下:
package hep.platform.lc;
import java.util.HashMap;
import java.util.Map;import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;public class MySessionListener implements HttpSessionListener {
public static Map userMap = new HashMap();
private MySessionContext myc=MySessionContext.getInstance();
public void sessionCreated(HttpSessionEvent httpSessionEvent) {
myc.AddSession(httpSessionEvent.getSession());
}
public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
HttpSession session = httpSessionEvent.getSession();
myc.DelSession(session);
}
}
第二,再写一个类用来保存sessionId和session信息,信息的保存通过哈希表实现。通过用户名和密码登录时,服务器会返回一个sessionId和session信息,我们将这些信息保存到哈希表中,以后如果用到session信息时就可以根据sessionId来获取了。该类的代码如下:
public class MySessionContext {
private static MySessionContext instance;
private HashMap mymap;
private MySessionContext() {
mymap = new HashMap();
}
public static MySessionContext getInstance() {
if (instance == null) {
instance = new MySessionContext();
}
return instance;
}
public synchronized void AddSession(HttpSession session) {
if (session != null) {
mymap.put(session.getId(), session);
}
}
public synchronized void DelSession(HttpSession session) {
if (session != null) {
mymap.remove(session.getId());
}
}
public synchronized HttpSession getSession(String session_id) {
if (session_id == null) return null;
return (HttpSession) mymap.get(session_id);
}}
第三,根据sessionId获取信息时要注意一个问题, java为了确保用户信息的安全性,已经取消了根据id查找session的相关方法,不过幸运的是在servlet中,我们可以在doget或dopost方法中使用我们之前写好的getSession(String session_id)方法来获取session
-
-
- 标签:
- 保存
- httpsessionevent
- private
- public
- 信息
- import
- null
- mysessioncontext
- session
- android
- httpsession
-
加入的知识群:
学习元评论 (0条)
聪明如你,不妨在这 发表你的看法与心得 ~