Mam aplikację Flask
, serwowaną z Nginx + WSGI (FastCGI & Gevent) i używam standardowych sesji Flask. Zrobić nie użyć session.permanent=True
lub jakiejkolwiek innej dodatkowej opcji, ale po prostu ustawić SECRET_KEY
w domyślnej konfiguracji.Identyfikatory sesji stałej kolby
Nie wykonuję ani nie zapisuję żadnych par (kluczy, wartości) w sesji i bazuję tylko na wpisie SID = session['_id']
, aby zidentyfikować powracającego użytkownika. Używam następujący kod do odczytu SID
:
@page.route ('/')
def main (page='home', template='index.html'):
if not request.args.get ('silent', False):
print >> sys.stderr, "Session ID: %r" % session['_id']
Zrobiłem następujące obserwacje:
- Dla samych adresów IP, ale z różnych przeglądarek mam inny
SIDs
- to oczekiwano; - Dla różnych adresów IP & ta sama przeglądarka znów ma inną wartość:
SIDs
- oczekiwana; - Dla tego samego adresu IP w tej samej przeglądarce otrzymuję ten sam
SID
- również oczekiwany;
Teraz punkt (3) jest interesujący, ponieważ nawet jeśli usuwać odpowiedni Cookie SID
pozostaje stałą! Do pewnego stopnia nawet to może być zrozumiałe, ale w rzeczywistości oczekiwałem, że SID
zmieni się między różnymi plikami cookie. Ale jedyną różnicą jest to, że widzę
session.new is True
dla pierwszy żądanie natychmiast po skreślenia cookie. Nawet to jest bardzo oczekiwane; ale biorąc pod uwagę te fakty, że stoją następujące problemy:
Czy to oznacza, że dla różne użytkownicy siedzący za samym IP (z tej samej konfiguracji przeglądarki) my back-end będzie pomylić je dla ten sam użytkownik?
Jeśli punkt (1) jest nie przypadek, obecne zachowanie tych „lepkie” sesji jest całkiem przyjemne, ponieważ pozwala to uniknąć sytuacji, w której moi użytkownicy mogą stracenia tam dane tylko dlatego, że usunięte odpowiedni plik cookie .
Mogą nadal zapisać dzień, ponownie odwiedzając witrynę z tej samej sieci z tą samą przeglądarką. Podoba mi się, ale tylko , jeśli punkt (1) jest nie przypadku.
Zakładam punkt (1) faktycznie bite me, byłoby zawarcie faktycznie zaoszczędzić
token
w sesji, a więc zaakceptować los, że użytkownik może wysadzić się w powietrze, po prostu usuwając jego ciasteczko?Czy istnieje sposób, aby powiedzieć
Flask
, aby nadać różneSIDs
dla każdego świeżego pliku cookie?
Właściwie to pytanie wzbudzić ponieważ użyłem usługę wpływu obciążenia, która była symulacja różne użytkowników (na tym samym IP), ale my back-end przechowywane widząc je jako pojedynczy użytkownik, ponieważ odpowiada SIDs
były wszystkie takie same.
Aplikacja jest dostępna do testów na http://webed.blackhan.ch (które po zwolnieniu przeniesie https://notex.ch [edytor tekstowy przeglądarka]). Dziękuję Ci za Twoje odpowiedzi.
Dziękuję za odpowiedź: rzeczywiście używam 'Flask-Login' i wydaje mi się, że to wyjaśnia, dlaczego widziałem tylko jednego użytkownika z tą samą kombinacją (IP, User-Agent). Wprowadziłem token do pliku cookie, aby móc go odróżnić w tym przypadku. – hsk81
@ hsk81: To dziwne. Jestem całkiem pewny, że sesje Flasku mają przydzielone losowe identyfikatory, aby zapobiec takim problemom. – Blender
Nie mam pojęcia, to daje mi stałą wartość dla 'session ['_ id']' nawet po usunięciu cookie. Mam wrażenie, że nie ma takiej randomizacji, lub w jakiś sposób 'session ['_ id']' jest niewłaściwym sposobem uzyskania dostępu do tożsamości sesji. Nie znalazłem wzmianki o tym, jakie powinno być podejście * kanoniczne *, i po prostu zajrzałem do cookie, w jaki sposób Flask tworzy i używa tego: ''id''. Być może przeoczyłem coś w dokumentacji. – hsk81