Beispiel #1
0
    def _clean_old_sessions(self):
        """
        Delete expired sessions from the datastore.

        This is only called for CLEAN_CHECK_PERCENT percent of requests because
        it could be rather intensive.
        """
        duration = datetime.timedelta(seconds=self.session_expire_time)
        session_age = datetime.datetime.now() - duration
        query = UserSession.all()
        query.filter("last_activity <", session_age)
        results = query.fetch(1000)
        for result in results:
            data_query = UserSessionData.all()
            query.filter("session", result)
            data_results = data_query.fetch(1000)
            for data_result in data_results:
                data_result.delete()
            memcache.delete("sid-" + str(result.key()))
            result.delete()
Beispiel #2
0
    def _get(self, keyname=None):
        """
        Return all of the SessionData object unless keyname is specified, in
        which case only that instance of SessionData is returned.
        Important: This does not interact with memcache and pulls directly
        from the datastore.

        Args:
            keyname: The keyname of the value you are trying to retrieve.
        """
        query = UserSessionData.all()
        query.filter("session", self.session)
        if keyname != None:
            query.filter("keyname =", keyname)
        results = query.fetch(1000)

        if len(results) is 0:
            return None
        if keyname != None:
            return results[0]
        return results
Beispiel #3
0
    def delete_all_sessions(self):
        """
        Deletes all sessions and session data from the data store and memcache.
        """
        all_sessions_deleted = False
        all_data_deleted = False

        while not all_sessions_deleted:
            query = UserSession.all()
            results = query.fetch(1000)
            if len(results) is 0:
                all_sessions_deleted = True
            else:
                for result in results:
                    result.delete()

        while not all_data_deleted:
            query = UserSessionData.all()
            results = query.fetch(1000)
            if len(results) is 0:
                all_data_deleted = True
            else:
                for result in results:
                    result.delete()
Beispiel #4
0
    def _put(self, keyname, value):
        """
        Insert a keyname/value pair into the datastore for the session.

        Args:
            keyname: The keyname of the mapping.
            value: The value of the mapping.
        """
        keyname = self._validate_key(keyname)

        if value is None:
            raise ValueError("You must pass a value to put.")
        sessdata = self._get(keyname=keyname)
        if sessdata is None:
            sessdata = UserSessionData()
            sessdata.session = self.session
            sessdata.keyname = keyname
        sessdata.content = pickle.dumps(value)
        self.cache[keyname] = pickle.dumps(value)
        sessdata.put()
        self._set_memcache()