java开发微信session管理
来源:互联网 发布:盒子下载软件 编辑:程序博客网 时间:2024/06/16 11:51
主要用途:主要用于session管理。在微信开发时,因为通过微信服务器转发,而丢失cookie和seesion,无法使用session,所以使用微信服务器post过来的openid当做sessionid ,openid是一个唯一不重复的,这样每个用户的状态是可以独立的
参考地址:http://www.ablanxue.com/shtml/201502/26386_1.shtml
参考文章比较乱,但给我带来了灵感。我的这个和他的基础相同,不相同的是:
1.我采用一个线程来管理session集合,减少内存消耗,session失效时间可能会多一秒
2.我session采用session创建时间,session保存时间
参考地址:http://www.ablanxue.com/shtml/201502/26386_1.shtml
参考文章比较乱,但给我带来了灵感。我的这个和他的基础相同,不相同的是:
1.我采用一个线程来管理session集合,减少内存消耗,session失效时间可能会多一秒
2.我session采用session创建时间,session保存时间
package com.fkhd.weixin.session;/** * session键值对实体类 */public class SessionData {/** * 键 */private String name;/** * 值 */private Object value;public String getName() {return name;}public void setName(String name) {this.name = name;}public Object getValue() {return value;}public void setValue(Object value) {this.value = value;}}
package com.fkhd.weixin.session;import java.util.ArrayList;import java.util.List;/** * session实体类 */public class Session {/** * 唯一标识 */private String openid;/** * 创建时间 */private long createTime; /** * 有效时间 */private long validTime;/** * 键值对集合 */private List<SessionData> sessionDatas=new ArrayList<SessionData>();public String getOpenid() {return openid;}public void setOpenid(String openid) {this.openid = openid;}public long getCreateTime() {return createTime;}public void setCreateTime(long createTime) {this.createTime = createTime;}public long getValidTime() {return validTime;}public void setValidTime(long validTime) {this.validTime = validTime;}public List<SessionData> getSessionDatas() {return this.sessionDatas;}public void setSessionDatas(List<SessionData> sessionDatas) {this.sessionDatas=sessionDatas;} }
package com.fkhd.weixin.session;import java.util.ArrayList;import java.util.List;/** * session集合 */public class SessionList {/** * session集合 */public static List<Session> sessionList=new ArrayList<Session>();/** * 查找session中是否有指定项 * @param openid session标识 * @return 若存在openid相同的session,返回在集合中对应的位置,若不存在返回-1 */public static int search(String openid){int size = sessionList.size(); for ( int i=0 ; i<size ; i++){ if ( sessionList.get(i).getOpenid().equals(openid)) return i;}return -1; }/** * 移除session */public static void remove(String openid) {int i = search(openid);if (i>=0)sessionList.remove(i);}/** * 向session中存入数据 * @param name * @param value * @param openid */public static void setSeesion(String name, Object value, String openid){System.out.println("setSeesion " + name + " " + value + " " + openid);int i = search(openid);if (i>=0){SessionData data = new SessionData();data.setName(name);data.setValue(value);sessionList.get(i).getSessionDatas().add(data);}} /** * 创建session * @param openid */public static void setSeesion(String openid){System.out.println("setSeesion " + openid);int i = search(openid); if (i<0){ //建立线程 Session session = new Session();//两个小时会话session.setValidTime(120*60*1000);//当前时间戳session.setCreateTime(System.currentTimeMillis());//session唯一标识session.setOpenid(openid);//添加sessionsessionList.add(session);}}/** * 根据name,获取session对象中键值对 * @param name * @param openid */public static Object getSession(String name, String openid){System.out.println("getData " + name + " " + openid);int i = search(openid); if (i>=0) {SessionData sessionData=null;for (SessionData sData : sessionList.get(i).getSessionDatas()) {if (sData.getName().equals(name)) {sessionData=sData;}}if (sessionData!=null){Object value = sessionData.getValue();System.out.println(name + "值为 " + value);return value;} }return null;}/** * 根据name,移除session对象中键值对 * @param name * @param openid */public static void removeData(String name, String openid){int i = search(openid); if (i>0){sessionList.get(i).getSessionDatas().remove(name);}}}
package com.fkhd.weixin.session;import java.util.ArrayList;import java.util.List;/** * 更新session集合状态 */public class SessionThread implements Runnable{ public void run() { while(true){//当前时间戳long currentTime=System.currentTimeMillis();//休眠1分钟try {if (SessionList.sessionList.isEmpty()){ System.out.println("现在还没session,休息10分钟!");//休眠10分钟Thread.sleep(10*60*1000);}else {//用来装需要删除的元素List<Session> delList = new ArrayList<Session>();//遍历session集合,将时间戳到期的提出for (Session session : SessionList.sessionList) {//当前时间大于创建时间加保存时间的session移除if (currentTime>session.getCreateTime()+session.getValidTime()) {delList.add(session);System.out.println("要移除的session,openid为:"+session.getOpenid());}}//移除要删除的元素SessionList.sessionList.removeAll(delList);//休眠1分钟Thread.sleep(60*1000);}} catch (InterruptedException e) {e.printStackTrace();}}}}
1 0
- java开发微信session管理
- java微信开发API解析(五)-用户管理
- Java微信公众平台开发之消息管理
- 微信java开发2——消息管理
- Java微信公众平台开发之素材管理
- 微信开发 java
- java 微信开发
- java 微信开发
- java微信开发
- JAVA微信开发
- java微信开发
- 微信开发三: 消息管理
- 微信开发七 素材管理
- 微信开发八 用户管理
- 微信开发十 帐号管理
- 微信公众号用户管理开发
- 微信开发 - 微擎管理微信公众号
- 微信公众号开发---微信接口素材管理
- JS获取URL参数的函数
- [OpenGL ES 01]OpenGL ES之初体验
- Time类中的运算符重载
- CAS(10)-spring整合
- 修改fckeditor的文件上传功能步骤
- java开发微信session管理
- 仿微博Tab切换 TabIndicator
- PHP性能优化
- js 判断键盘事件大全 兼容FireFox和IE(退格、制表、回车、空格、方向键、删除键等)
- A5D2 GPIO测试
- Qt拖放
- spring boot log4j2配置(使用log4j2.yml文件)
- objective-c学习推荐网站
- 常用JQUERY操作总结