00001
00002
00003
00004
00005
00006
00008 #ifndef CPPCMS_SESSION_COOKIES_H
00009 #define CPPCMS_SESSION_COOKIES_H
00010 #include <cppcms/session_api.h>
00011 #include <booster/hold_ptr.h>
00012 #include <booster/noncopyable.h>
00013 #include <memory>
00014 #include <string>
00015 namespace cppcms {
00016 class session_interface;
00017
00021 namespace sessions {
00022
00034 class encryptor : public booster::noncopyable {
00035 public:
00040 virtual std::string encrypt(std::string const &plain) = 0;
00046 virtual bool decrypt(std::string const &cipher,std::string &plain) = 0;
00050 virtual ~encryptor() {}
00051 };
00052
00058 class encryptor_factory {
00059 public:
00063 virtual std::auto_ptr<encryptor> get() = 0;
00064
00068 virtual ~encryptor_factory() {}
00069 };
00070
00074 class CPPCMS_API session_cookies : public session_api {
00075 public:
00079 session_cookies(std::auto_ptr<encryptor> encryptor);
00083 ~session_cookies();
00084
00088 virtual void save(session_interface &,std::string const &data,time_t timeout,bool newone ,bool on_server);
00089
00093 virtual bool load(session_interface &,std::string &data,time_t &timeout);
00094
00098 virtual bool is_blocking();
00099
00103 virtual void clear(session_interface &);
00104 private:
00105 struct _data;
00106 booster::hold_ptr<_data> d;
00107 std::auto_ptr<encryptor> encryptor_;
00108 };
00109 }
00110 }
00111
00112 #endif