sa-token/sa-token-doc/doc/use/session.md
2021-01-02 04:00:49 +08:00

3.3 KiB
Raw Blame History

Session会话


Session是会话中专业的数据缓存组件sa-token中Session分为三种, 分别是:

  • 账号Session: 指的是框架为每个loginId分配的Session
  • 令牌Session: 指的是框架为每个token分配的Session
  • 自定义Session: 指的是以一个特定的值作为SessionId来分配的Session

账号Session

有关账号Session的API如下

StpUtil.getSession();                       // 获取当前账号id的Session (必须是登录后才能调用)
StpUtil.getSession(true);                   // 获取当前账号id的Session, 并决定在Session尚未创建时是否新建并返回
StpUtil.getSessionByLoginId(10001);         // 获取账号id为10001的Session
StpUtil.getSessionByLoginId(10001, true);   // 获取账号id为10001的Session, 并决定在Session尚未创建时是否新建并返回

令牌Session

有关令牌Session的API如下

StpUtil.getTokenSession();                  // 获取当前token的专属Session 
StpUtil.getTokenSessionByToken(token);      // 获取指定token的专属Session 

自定义Session

自定义Session指的是以一个特定的值作为SessionId来分配的Session, 借助自定义Session你可以为系统中的任意元素分配相应的session
例如以商品id作为key为每个商品分配一个Session以便于缓存和商品相关的数据其相关API如下

SaSessionCustomUtil.isExists("goods-10001");                // 查询指定key的Session是否存在
SaSessionCustomUtil.getSessionById("goods-10001");          // 获取指定key的Session如果没有则新建并返回  
SaSessionCustomUtil.getSessionById("goods-10001", false);   // 获取指定key的Session如果没有第二个参数决定是否新建并返回  
SaSessionCustomUtil.deleteSessionById("goods-10001");       // 删除指定key的Session

在未登录状态下是否可以获取令牌Session这取决于你配置的tokenSessionCheckLogin值是否为false详见框架配置

Session相关操作

那么获取到的SaSession具体有哪些方法可供操作?

session.getId();                          // 返回此Session的id 
session.getCreateTime();                  // 返回此Session的创建时间 (时间戳) 
session.getAttribute('name');             // 在Session上获取一个值 
session.getAttribute('name', 'zhang');    // 在Session上获取一个值并指定取不到值时返回的默认值
session.setAttribute('name', 'zhang');    // 在Session上写入一个值 
session.removeAttribute('name');          // 在Session上移除一个值 
session.clearAttribute();                 // 清空此Session的所有值 
session.containsAttribute('name');        // 获取此Session是否含有指定key (返回true或false)
session.attributeKeys();                  // 获取此Session会话上所有key (返回Set<String>)
session.getDataMap();                     // 返回此Session会话上的底层数据对象如果更新map里的值请调用session.update()方法避免数据过时)
session.update();                         // 将这个Session从持久库更新一下
session.logout();                         // 注销此Session会话

具体可参考javax.servlet.http.HttpSessionSaSession所含方法与其大体类似