bool TSessionRedisStore::store(TSession &session) { QByteArray data; QDataStream ds(&data, QIODevice::WriteOnly); ds << *static_cast<const QVariantMap *>(&session); data = qCompress(data, 1).toBase64(); #ifndef TF_NO_DEBUG { QByteArray badummy; QDataStream dsdmy(&badummy, QIODevice::ReadWrite); dsdmy << *static_cast<const QVariantMap *>(&session); TSession dummy; dsdmy.device()->seek(0); dsdmy >> *static_cast<QVariantMap *>(&dummy); if (dsdmy.status() != QDataStream::Ok) { tSystemError("Failed to store a session into the cookie store. Must set objects that can be serialized."); } } #endif TRedis redis; tSystemDebug("TSessionRedisStore::store id:%s", session.id().data()); return redis.setEx('_' + session.id(), data, lifeTimeSecs()); }
TSession TSessionSqlObjectStore::find(const QByteArray &id) { QDateTime modified = QDateTime::currentDateTime().addSecs(-lifeTimeSecs()); TSqlORMapper<TSessionObject> mapper; TCriteria cri; cri.add(TSessionObject::Id, TSql::Equal, id); cri.add(TSessionObject::UpdatedAt, TSql::GreaterEqual, modified); TSessionObject so = mapper.findFirst(cri); if (so.isNull()) { return TSession(); } TSession session(id); QDataStream ds(&so.data, QIODevice::ReadOnly); ds >> *static_cast<QVariantMap *>(&session); if (ds.status() != QDataStream::Ok) { tSystemError("Failed to load a session from the sqlobject store."); } return session; }