关于APP 与JAVA 服务端的替代SESSION 的 TOKEN方案 !

--++-- 2016-08-28 06:18:15
最近公司外包了一个APP,本人要给APP写接口.
问题:据闻APP不支持SESSION. 而且APP 是登录一次,以后不用登录, 搜了一轮,据说是用TOKEN 方式,保存在手机端跟服务端的数据库,每次登录验证TOKEN 更新TOKEN. 请问这是主流做法吗?

请有相关经验的朋友不惜吝教,没有经验希望也能一起讨论讨论.
...全文
5728 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
r2ght 2017-08-22
  • 打赏
  • 举报
回复
引用 3 楼 wlwlwlwl015 的回复:
服务器端肯定可以获取到app端请求的sessionid,维护这个sessionid就可以,每次app端请求都带上这个id以及用户名,服务器端写一个SessionContext的集合来保存维护就可以了,servlet2.5之后貌似不允许直接获取sessionid,我以前就是这么做的,android端和服务器端都是我写的

package com.wl.util;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

import javax.servlet.http.HttpSession;

public class SessionContext {

	private static Map<String, HttpSession> sessionMap = new HashMap<String, HttpSession>();

	public static Map<String, HttpSession> getSessionMap() {
		return sessionMap;
	}

	public synchronized static void addSession(HttpSession session) {
		if (session != null) {
			sessionMap.put(session.getId(), session);
		}

	}

	public synchronized static void delSession(HttpSession session) {
		if (session != null) {
			sessionMap.remove(session.getId());
		}

	}

	public synchronized static HttpSession getSession(String sessionid) {
		if (sessionid != null) {
			return (HttpSession) sessionMap.get(sessionid);
		} else {
			return null;
		}

	}

	public static void printCurrentSessionMapInfo() {
		System.out.println(sessionMap.size());
		Set<String> sessionids = sessionMap.keySet();
		for (String sessionid : sessionids) {
			System.out.println(sessionid);
		}
	}
	public static void clearAllSession() {
		if (sessionMap != null)
			sessionMap.clear();
	}

}

具体怎么实现的,我也想了解,能解答下吗
小灯光环 2016-08-30
  • 打赏
  • 举报
回复
服务器端肯定可以获取到app端请求的sessionid,维护这个sessionid就可以,每次app端请求都带上这个id以及用户名,服务器端写一个SessionContext的集合来保存维护就可以了,servlet2.5之后貌似不允许直接获取sessionid,我以前就是这么做的,android端和服务器端都是我写的

package com.wl.util;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

import javax.servlet.http.HttpSession;

public class SessionContext {

	private static Map<String, HttpSession> sessionMap = new HashMap<String, HttpSession>();

	public static Map<String, HttpSession> getSessionMap() {
		return sessionMap;
	}

	public synchronized static void addSession(HttpSession session) {
		if (session != null) {
			sessionMap.put(session.getId(), session);
		}

	}

	public synchronized static void delSession(HttpSession session) {
		if (session != null) {
			sessionMap.remove(session.getId());
		}

	}

	public synchronized static HttpSession getSession(String sessionid) {
		if (sessionid != null) {
			return (HttpSession) sessionMap.get(sessionid);
		} else {
			return null;
		}

	}

	public static void printCurrentSessionMapInfo() {
		System.out.println(sessionMap.size());
		Set<String> sessionids = sessionMap.keySet();
		for (String sessionid : sessionids) {
			System.out.println(sessionid);
		}
	}
	public static void clearAllSession() {
		if (sessionMap != null)
			sessionMap.clear();
	}

}

ps45221 2016-08-30
  • 打赏
  • 举报
回复
APP登录时,输入帐号(唯一),密码, 服务器在验证通过时,生成一段随机码(规律自己定,不重复即可,可以考虑UUID+一些东西), 然后把帐号当作key,随机码也就是token,当作value,放进缓存(推荐)或者数据库中,设置过期时间 以后App每次请求都要带这个token,你接收到请求第一步就是验证这个帐号做key的缓存中,有没有token值,没有或者过期,重新登录,正常才继续一下逻辑
柠檬茶ViTa 2016-08-29
  • 打赏
  • 举报
回复
首先app端是支持session的,不知道楼主从哪里听来的不支持. 其次问题 app一次登录了后续不需要登录了,哪怕程序进程关闭. 而要实现session永久存活,起码这个app进程不死的情况下你一直请求. token只需要在另一次打开的时候验证就好了.

81,091

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧