Exemplo n.º 1
0
// 无条件设置 sid-Session
func Set(sid string, ss *Session) (err error) {
	SessionBytes, err := json.Marshal(ss)
	if err != nil {
		return
	}

	item := memcache.Item{
		Key:   mc.SessionKey(sid),
		Value: SessionBytes,
	}
	return mc.Client().Set(&item)
}
Exemplo n.º 2
0
// 设置 sid-Session, 该 Session 是通过 Get 获取的,
// 如果在 Get 之后该 sid 对应的 Session 发生改变, 则返回错误.
func CompareAndSwap(sid string, ss *Session) (err error) {
	item := ss.memcacheItem
	if item == nil || item.Key != mc.SessionKey(sid) {
		return fmt.Errorf("参数 Session 不是通过 sid:%q 获取的", sid)
	}

	SessionBytes, err := json.Marshal(ss)
	if err != nil {
		return
	}

	item.Value = SessionBytes
	return mc.Client().CompareAndSwap(item)
}
Exemplo n.º 3
0
// 获取 Session, 如果找不到返回 errors.ErrNotFound.
func Get(sid string) (ss *Session, err error) {
	item, err := mc.Client().Get(mc.SessionKey(sid))
	if err != nil {
		if err == memcache.ErrCacheMiss {
			err = errors.ErrNotFound
		}
		return
	}

	ss = &Session{}
	if err = json.Unmarshal(item.Value, ss); err != nil {
		return
	}
	ss.memcacheItem = item
	return
}
Exemplo n.º 4
0
// 删除 Session, 如果没有匹配则返回 errors.ErrNotFound.
func Delete(sid string) (err error) {
	if err = mc.Client().Delete(mc.SessionKey(sid)); err == memcache.ErrCacheMiss {
		err = errors.ErrNotFound
	}
	return
}