Quản lý phiên trong Node.js? [đóng cửa]


100

Cách tốt nhất để quản lý các biến phiên trong Node.js là gì? Có thư viện nào không?

Câu trả lời:


95

Bạn có thể làm điều đó rất dễ dàng bằng cách sử dụng:

  • Kết nối: http://senchalabs.github.com/connect/

    Kết nối giống như Rack trong Ruby. Nó cung cấp cho bạn một lớp bổ sung, nơi bạn có thể "chơi" với xác thực, phiên, cookie, trong số những thứ khác.

Tùy chọn khác là sử dụng các khuôn khổ:

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

    Nó dường như là framework node.js được sử dụng nhiều nhất. Giống như Sinatra cho Ruby và chạy trên đầu kết nối.

  • Geddy: http://geddyjs.org/

    Nếu bạn muốn thực hiện các WebApp phức tạp hơn, Geddy là người bạn chọn. Giống như Rails cho Ruby.


Geddy cung cấp những gì trên / trên express? - Sự khác biệt giống như Sinatra và Rails?
— Michael

1
@ Michael geddy vs nhanh
— Raynos

4
Tôi nghĩ bạn nên đề cập rằng Express được xây dựng trên Connect - bất kỳ tính năng hoặc phần bổ trợ nào tương thích với Connect sẽ hoạt động với Express.
— Jonathan Dumaine,

Đối với tình trạng không có trạng thái, hãy xem stackoverflow.com/questions/17982607/…
— Robert Christian


13

Chỉ cần tải nó xuống memcache hoặc một số cơ chế bộ nhớ đệm khác. Tôi sẽ không tạo gánh nặng cho máy chủ của bạn với những thứ như thế này. Điểm của một máy chủ web siêu tinh gọn là gì phải nhớ những thứ.

Tôi cũng sẽ thử và phát triển trang web của bạn dưới dạng ứng dụng chứ không phải trang web hoặc coi trang web của bạn như một ứng dụng, sử dụng các tính năng tuyệt vời của html5 như lưu trữ cục bộ / cơ sở dữ liệu cục bộ và cắt giảm lưu lượng truy cập giữa máy chủ và máy khách .

Nếu vẫn thất bại (hoặc trang web nhỏ) thì điều gì đang ngăn bạn viết lớp phiên của riêng mình. Không khó đâu. Đặc biệt nếu nó là một thứ trong bộ nhớ. Đặt một số logic hẹn giờ để hết thời gian các phiên và bạn sẽ làm được. Chết tiệt trong một ngôn ngữ động chẳng hạn như JavaScript, hẳn là một điều khó hiểu.

Cấu trúc phải là một từ điển với khóa là phiên và giá trị là một đối tượng chứa thông tin chi tiết về giao tiếp và khả năng cuối cùng (để cho phép truy cập vào các tính năng nhất định). Thêm chức năng quét để xóa các phiên cũ đã hết thời gian. và chơi lô tô. Một dịch vụ phiên cơ bản. kiểm tra cơ bản về "có phải là khóa phiên trong danh sách ... có / không ... nhận thông tin chi tiết" ... và tôi nghĩ đó là nó .... hoặc có một số tính năng mà tôi đang thiếu.

Cá nhân tôi sẽ tránh mọi công cụ của bên thứ ba càng lâu càng tốt. Cát thời gian thay đổi rất nhanh và bạn luôn có thể phụ thuộc vào mã do chính mình phát triển.


16
Theo kinh nghiệm của tôi, mỗi khi bạn thêm một công cụ mới của bên thứ ba, bạn tự ràng buộc mình vào bên thứ ba đó để nâng cao tuổi thọ của sản phẩm mà bạn đang phát triển. Điều này thật tồi tệ, việc thiếu kiểm soát và hiểu ý tưởng của một số người về mã tốt đã được đóng hộp đen là rất khó để đối phó khi có sự cố xảy ra (nó luôn luôn xảy ra) trong hộp đen nói trên. Bạn sẽ tìm thấy nhiều tuyên bố từ chối trách nhiệm gắn liền với các thỏa thuận cấp phép của bên thứ ba, "sử dụng có rủi ro riêng" là điều mà tôi thường thấy. Cát thời gian thay đổi nhanh chóng và chỉ vì ai đó nói rằng mã là 1.0 không có nghĩa là jack nữa.
— WeNeedAnswers

6
Nếu bạn có thể tự lập trình mã và quan trọng nhất là hiểu mã và mã có thể được phát triển trong một khoảng thời gian hợp lý, tại sao bạn lại sử dụng công cụ của bên thứ ba? Và tôi tin tưởng tất cả các mã tôi viết hơn nhiều so với một số bên thứ ba. Tôi là một kỹ sư không phải một nghệ sĩ, tôi xây dựng những đoạn mã đôi khi bị hỏng nhưng không bao giờ sụp đổ. Không có lời bào chữa nào cho mã chưa được kiểm tra. Với các công cụ như kiểm thử tích hợp, kiểm thử đơn vị, kiểm thử hồi quy, bạn viện cớ gì để nói rằng mã của bạn chưa được kiểm tra? Có thêm niềm tin vào tài năng của bạn. Của bạn tốt như bất kỳ bên thứ ba.
— WeNeedAnswers

10
Có rất nhiều lỗ hổng trong lập luận của bạn, tôi thậm chí không biết bắt đầu từ đâu. 1) Tại sao lại sử dụng công cụ của bên thứ ba: để tiết kiệm thời gian và năng lượng. 2) Nguồn mở! = Không có thương hiệu. Express / Connect được thực hiện bởi các nhóm và công việc của họ đã được kiểm tra bởi một cộng đồng lớn. Họ không phải là "một số đứa trẻ." 3) Đổi mới bánh xe tốn thời gian. Có thể thời gian của bạn là rảnh, hầu hết mọi người thì không. 4) Bạn sẽ không bao giờ biết từng con vít, bu lông và kẹp. Tất cả các phần mềm hiện đại đều được xây dựng trên các khuôn khổ, đơn giản là có quá nhiều thứ mà bất kỳ ai cũng có thể biết từng chút một. Tôi thành thật không tin rằng bạn có thể là một nhà phát triển chuyên nghiệp với những ý kiến ​​này.
— Kyeotic

6
Các khuôn khổ không phải là "viên đạn bạc". Khi bạn lập trình dựa trên Framework, bạn cho phép người khác kiểm soát các quyết định quan trọng về mã cho bạn. Chắc chắn bạn có thể thấy điều đó? Những quyết định lớn này một khi đã được đưa ra rất khó để lấy lại, nếu Khung quá bao trùm thì nó sẽ đưa ra tất cả các quyết định quan trọng cho bạn. Sử dụng Framework cũng làm xáo trộn chương trình thực tế. Xác định cách diễn giải của bạn về một Framework, có nhiều hơn một loại Framework. Một số Khung công tác được tích hợp với ngôn ngữ lập trình nên tôi gọi các hệ thống này là Hệ thống lập trình.
— WeNeedAnswers

5
Cá nhân tôi chưa bao giờ xúc phạm bạn, tôi đã nói rằng lập luận của bạn có lỗ hổng và sau đó tôi xếp chúng ra. You! = Luận điểm của bạn. Khi tôi nói rằng tôi thực sự không tin rằng bạn có thể là một nhà phát triển chuyên nghiệp với những ý kiến ​​này, ý tôi là "bạn" chung chung, không phải bạn cụ thể. Ý kiến ​​của bạn về các khuôn khổ bỏ qua thực tế là tất cả các phần mềm hiện đại đều sử dụng chúng. Tôi giữ vững lập trường của mình, và điều này sẽ không đi đến đâu. Tôi đồng ý với câu trả lời được chấp nhận, rằng sử dụng Express / Connect là cách phù hợp để đi. Do đó, tôi bảo vệ Express.
— Kyeotic

6

Câu trả lời của Donald rất hay - một khi bạn đã tham gia vào mô hình hành động của phần mềm trung gian kết nối, bạn phải đưa ra quyết định về loại cửa hàng phiên sẽ sử dụng. Cái mặc định nói chung là MemoryStore, và không dùng cho mục đích sản xuất. Dưới đây là một số lựa chọn của bạn:

Mongo https://github.com/mikkel/express-session-mongo - Hãy đảm bảo sử dụng tùy chọn 'native_parser: false'

Redis https://github.com/visionmedia/connect-redis - Rất tốt, nhưng nếu bạn chưa sử dụng redis cho pub / sub hoặc bộ nhớ thì nó có thể không lý tưởng.

Lưu ý, có những sự lựa chọn khác - nó phụ thuộc vào dự án của bạn. Tìm kiếm thứ gì đó bạn có thể giới thiệu để tận dụng nền tảng công nghệ hiện có của bạn.


3
Tôi muốn tập trung vào "Cái mặc định trong express là MemorySrote, và không dành cho mục đích sản xuất". Tới engineering.linkedin.com/nodejs/... và đọc điểm 7.
— guiomie

4
Điều đó thật thú vị, vậy bạn sẽ quản lý quyền của người dùng như thế nào nếu không phải bằng cách duy trì các phiên?
— Costa

2

Nếu bạn đang tìm kiếm sự phát triển web nghiêm túc bằng Node.js, hãy sử dụng Express framework ; nó hỗ trợ các phiên.

Tạo dự án Express với các tùy chọn --sessions.

$ express --sessions

Để cài đặt Express:

$ npm install express -g

Không còn được hỗ trợ. Bạn phải thêm cookie-sessionvào của bạn package.josnđể làm việc.
— Victor Schröder
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookie và Chính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.