Zarządzasz sesjami w Node.js? [Zamknięte]


101

Jaki jest najlepszy sposób zarządzania zmiennymi sesji w Node.js? Czy jest jakaś biblioteka?

Odpowiedzi:


95

Możesz to zrobić bardzo łatwo za pomocą:

  • Połącz: http://senchalabs.github.com/connect/

    Connects jest jak Rack in Ruby. Daje Ci dodatkową warstwę, na której możesz „bawić się” między innymi uwierzytelnianiem, sesjami, plikami cookie.

Inną opcją jest użycie frameworków:

  • Express.js: http://expressjs.com/

    Wydaje się, że jest to najczęściej używany framework node.js. Jest jak Sinatra dla Rubiego i działa na wierzchu connect.

  • Geddy: http://geddyjs.org/

    Jeśli chcesz tworzyć bardziej złożone aplikacje internetowe, wybierz Geddy. Jest jak Rails for Ruby.


Co oferuje Geddy oprócz / Over Express? - Ta sama różnica co Sinatra i Rails?
— Michael

1
@Michael Geddy vs Express
— Raynos

4
Myślę, że powinieneś wspomnieć, że Express jest zbudowany na bazie Connect - wszelkie funkcje lub dodatki, które są kompatybilne z Connect, będą działać z Express.
— Jonathan Dumaine,

Informacje na temat bezpaństwowości można znaleźć na stronie stackoverflow.com/questions/17982607/…
— Robert Christian

14

Po prostu wyładuj go do memcache lub innego mechanizmu buforowania. Nie obciążałbym waszych serwerów takimi rzeczami. Jaki jest sens super odchudzonego serwera internetowego, który musi pamiętać o rzeczach.

Spróbowałbym również rozwinąć twoją witrynę jako aplikację, a nie witrynę internetową, lub traktować twoją witrynę jako aplikację, wykorzystać wspaniałe funkcje html5, takie jak lokalna pamięć / lokalne bazy danych i zmniejszyć ilość ruchu między serwerem a maszynami klienckimi .

Jeśli wszystko inne zawiedzie (lub witryna jest mała), to co powstrzymuje cię przed napisaniem własnej klasy sesji. Nie jest to trudne. Zwłaszcza jeśli jest to coś w rodzaju pamięci. Umieść trochę logiki timera, aby wygasić sesje i gotowe. Cholera w dynamicznym języku, takim jak JavaScript, powinno być pestką.

Struktura powinna być słownikiem, w którym kluczem jest sesja, a wartością jest obiekt zawierający szczegóły ostatniej komunikacji i możliwości (aby umożliwić dostęp do niektórych funkcji). Dodaj funkcję czyszczenia, aby usunąć stare sesje, które wygasły. i bingo. Podstawowa usługa sesji. podstawowe sprawdzenie „czy klucz sesji jest na liście… tak / nie… zdobądź szczegóły”… i myślę, że to wszystko… lub czy brakuje mi jakiejś funkcji.

Osobiście unikałbym wszelkich narzędzi innych firm tak długo, jak to możliwe. Piaski czasu przesuwają się bardzo szybko i zawsze możesz polegać na kodzie stworzonym przez siebie.


16
Cóż, z mojego doświadczenia wynika, że ​​za każdym razem, gdy dodajesz nowe narzędzie innej firmy, wiążesz się z tą firmą na czas oczekiwanej długości życia produktu, który tworzysz. To jest złe, brak kontroli i zrozumienia czyjejś idei dobrego kodu, który został zakodowany w czarnej skrzynce, jest bardzo trudny do rozwiązania, gdy coś pójdzie nie tak (zawsze tak się dzieje) we wspomnianej czarnej skrzynce. Znajdziesz wiele zastrzeżeń dołączonych do umów licencyjnych stron trzecich. Często widzę „używanie na własne ryzyko”. Piaski czasu przesuwają się szybko i tylko dlatego, że ktoś mówi, że kod to 1.0, nie oznacza już Jacka.
— WeNeedAnswers

6
Jeśli potrafisz samodzielnie zaprogramować kod i co najważniejsze, go rozumiesz, a kod można opracować w rozsądnym czasie, dlaczego miałbyś używać narzędzia innej firmy? I ufam całemu kodowi, który piszę, o wiele bardziej niż jakimkolwiek osobom trzecim. Jestem inżynierem, a nie artystą, tworzę kod, który czasami się psuje, ale nigdy się nie zawala. Nie ma wymówek dla kodu, który nie został przetestowany. Z takimi narzędziami jak testy integracyjne, testy jednostkowe, testy regresyjne, jakiej wymówki używasz, żeby powiedzieć, że Twój kod nie został przetestowany? Miej więcej wiary w swoje talenty. Jesteś tak dobry, jak każda osoba trzecia.
— WeNeedAnswers

10
W twojej argumentacji jest tak wiele dziur, że nawet nie wiem od czego zacząć. 1) Po co używać narzędzia innej firmy: aby zaoszczędzić czas i energię. 2) Open Source! = Brak marki. Express / Connect są tworzone przez zespoły, a ich praca została zweryfikowana przez dużą społeczność. Nie są „jakimś dzieckiem”. 3) Wymyślanie na nowo kół kosztuje czas. Może twój czas jest wolny, większość ludzi nie. 4) Nigdy nie poznasz każdej śruby, śruby i klipsa. Całe nowoczesne oprogramowanie jest oparte na frameworkach, po prostu jest za dużo, by ktokolwiek mógł wiedzieć wszystko. Szczerze nie wierzę, że z takimi opiniami można być profesjonalnym programistą.
— Kyeotic

6
Struktury nie są „srebrnymi kulami”. Kiedy programujesz w oparciu o Framework, pozwalasz komuś innemu przejąć kontrolę nad ważnymi decyzjami dotyczącymi kodu za Ciebie. Na pewno to widzisz? te wielkie decyzje, raz podjęte, są bardzo trudne do odtworzenia, jeśli ramy są zbyt obszerne, wszystkie najważniejsze decyzje zostaną podjęte za Ciebie. Używanie frameworków również zaciemnia rzeczywiste programowanie. Zdefiniuj swoją interpretację Framework, istnieje więcej niż jeden typ Framework. Niektóre frameworki są tak zintegrowane z językiem programowania, że ​​nazwałbym je systemami programowania.
— WeNeedAnswers

5
Nigdy cię osobiście nie obraziłem, powiedziałem, że twoja argumentacja ma dziury, a potem je wyłożyłem. Ty! = Twój argument. Kiedy powiedziałem, że szczerze nie wierzę, że możesz być profesjonalnym programistą mając takie opinie, miałem na myśli ogólne „ty”, a nie ciebie konkretnie. Twoje opinie na temat frameworków ignorują fakt, że wszystkie nowoczesne programy z nich korzystają. Stoję na stanowisku, a to nigdzie się nie zmierza. Zgadzam się z zaakceptowaną odpowiedzią, że korzystanie z Express / Connect jest właściwą drogą. Stąd moja obrona Express.
— Kyeotic


6

Odpowiedź Donalda jest dobra - kiedy już znajdziesz się we wzorcu oprogramowania pośredniego połączenia, musisz podjąć decyzję, jakiego typu magazynu sesji użyć. Domyślny w Express to MemoryStore i nie jest przeznaczony do użytku produkcyjnego. Oto niektóre z dostępnych opcji:

Mongo https://github.com/mikkel/express-session-mongo - pamiętaj, aby użyć opcji „native_parser: false”

Redis https://github.com/visionmedia/connect-redis - Bardzo dobrze, ale jeśli nie używasz jeszcze redis do pub / sub lub przechowywania, może nie być idealny.

Uwaga, są inne możliwości - to zależy od twojego projektu. Poszukaj czegoś, co możesz wprowadzić, wykorzystując istniejący stos technologii.


3
Chcę skupić się na „Domyślnym w ekspresie jest MemorySrote i nie jest przeznaczony do użytku produkcyjnego”. Wejdź na engineering.linkedin.com/nodejs/ ... i przeczytaj punkt 7.
— guiomie

4
To ciekawe, więc jak zarządzałbyś uprawnieniami użytkowników, jeśli nie utrzymując sesji?
— Costa

2

Jeśli szukasz poważnego programu do tworzenia stron internetowych przy użyciu Node.js, użyj frameworka Express ; obsługuje sesje.

Utwórz projekt Express z opcjami --sessions.

$ express --sessions

Aby zainstalować Express:

$ npm install express -g

Nie jest już obsługiwany. Musisz dodać cookie-sessiondo swojej package.josnpracy.
— Victor Schröder
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.