Как я могу отслеживать сеансы (длительность сеанса, откуда пользователь входит в систему и т. Д.), Используя аутентификацию Google по умолчанию в Appengine? - PullRequest
2 голосов
/ 14 октября 2011

Я бы хотел следить за моими пользователями - кто входит в систему, как долго они входят в систему, откуда они входят и т. Д. - из моего приложения GAE.Мне интересно, что является хорошим способом сделать это, используя механизмы аутентификации, предоставляемые Google.

Я могу легко добавить декораторы и ограничения в app.yaml, чтобы гарантировать, что определенные конечные точки доступны, только если пользователь вошел в системув;однако, это не дает мне необходимой информации.

Очевидно, что Google управляет сессиями в тайне - возможно ли с этим поговорить?Если нет, есть ли другие проверенные и проверенные подходы, которые я могу использовать для отслеживания вышеуказанной информации?

1 Ответ

0 голосов
/ 15 октября 2011

Когда пользователь входит в систему, пометьте его как активного в хранилище данных, используйте memcache для хранения любой информации о сеансе, которую вы хотите, а затем запустите обычное задание, которое проверяет активных пользователей и сохраняет данные из неактивных сеансов (т. Е. Старше 20 лет).минут или около того) в хранилище данных.

Вот пример, который отслеживает время начала и окончания пользователя:

def setUserSession(user):
    date = datetime.datetime.today()
    user_session = memcache.get("UserSession%s" % user.user_id())
    if user_session is not None:
        user_session = user_session.split(",")
        memcache.replace("UserSession%s" % user.user_id(),"%s,%s" %(user_session[0],date.strftime("%Y-%m-%d %H:%M:%S")))
    else:
        memcache.set("UserSession%s" % user.user_id(),"%s,%s" %(date.strftime("%Y-%m-%d %H:%M:%S"), date.strftime("%Y-%m-%d %H:%M:%S")))
        profile = db.GqlQuery("SELECT * FROM UserProfile WHERE User = :1", user).get()
        if profile:
            profile.LastSession = date
            profile.IsActive = True
            profile.put()
        else:
            profile = UserProfile()
            profile.User = user
            profile.FirstSession = date
            profile.LastSession = date
            profile.IsActive = True
            profile.put()

def collectUserSessions():
    active_users = db.GqlQuery("SELECT * FROM UserProfile WHERE IsActive = :1", True)
    for u in active_users:
        session = memcache.get("UserSession%s" % u.User)
            if session:
                session = session.split(',')
                last_active = parseDate(session[1]) #parses string into datetime object
                if date - datetime.timedelta(minutes=20) > last_active:
                    record = SessionHistory()
                    record.User = u.User
                    record.SessionStart = parseDate(session[0])         
                    record.SessionEnd = last_active
                    record.put()
                    memcache.delete("UserSession%s" % u.User)                       
                    u.LastSession = last_active
                    u.IsActive = False
                    u.put()
            else:
                u.IsActive = False
                u.put()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...