​jfinal-club例子里登录的疑问

jfinal-club登录代码LoginService里的loginAccountCacheName和sessionIdName在代码里是写死的名称"loginAccount"和"jfinalId",实际应用中是不是应该用用户的一个唯一标识来赋值?

评论区

JFinal

2018-09-04 10:18

LoginService 里的正是常量,注意看一下是用的 public static final String

当你需要改变的时候只需要改变如下两个地方:
1:LoginService 中定义的常量值
2:页面的 loginAccount

用户的唯一标识是用的一个唯一的 UUID 值,千万不要与 LoginService 中定义的常量来混淆

libofei

2018-09-04 19:51

@JFinal 那退出的时候是怎么识别处理哪个用户的session呢

JFinal

2018-09-04 20:54

@libofei club 中没有使用 session, 是自己用数据库的 session 表代替了原本的 session 功能

这样做的好处是便于做集群,每个集群的结点共享这个数据库就很方便实现了集群

而你谈到的 session 是让每个 tomcat 去持有了 session 数据,不支持集群

libofei

2018-09-04 22:36

@JFinal 这个我理解,不过用户logout时怎么识别是哪个用户退出了呢

JFinal

2018-09-04 23:29

@libofei 通过下面的代码:
String sessionId = getCookie(LoginService. sessionIdName);
然后通过 sessionId 这个值去数据库中的 session 表里面去查询就可以知道是哪个用户了

如果只是退出功能,不用查询,只需要做两步:
1:删除 session 表中相关数据:
Db.update("delete from session where id = ? ", 从cookie得到的sessionId 值)

2:删除 cookie 值:
removeCookie(LoginService. sessionIdName)

这段代码在 jfinal club 中的 LoginService 类的 logout(...) 方法中有:
public void logout(String sessionId) {
if (sessionId != null) {
CacheKit.remove(loginAccountCacheName, sessionId);
Session.dao.deleteById(sessionId);
}
}

配置合 LoginController 的 logout() 这个 action 看一下就一目了然了

libofei

2018-09-06 16:36

@JFinal 谢谢。String sessionId = getCookie(LoginService. sessionIdName)这段代码是把浏览器传来的cookie取到了拿的sessionid吧,对于移动端app的用户登录这样是不是不行了?

libofei

2018-09-06 16:38

@JFinal 另外,设计接口时,如果设计跟用户相关的操作,是否都应该利用sessionid的方式来取用户信息,而不是把用户的真实id告诉前端,每次用真实id调取相关信息?

libofei

2018-09-07 20:18

@JFinal 如果考虑移动端app登录,用什么机制比较好,cookie的方式就不太适用了吧

热门反馈

扫码入社