2012-11-14 10 views
27

Các phiên Meteor có được đặt lại khi có làm mới trang không?Phiên sao băng và trình duyệt làm mới

Vì một lý do nào đó mà tôi không nghĩ là họ đã làm nhưng có vẻ như họ đã làm. Có cách nào để khiến chúng tồn tại không?

Nếu không có giải pháp nào tốt nhất cho điều này?

Tôi muốn cho phép cùng một dữ liệu hiển thị nếu người dùng làm mới (dữ liệu này dành riêng cho người dùng) ngay cả khi họ chưa đăng ký.

+0

Tôi lưu một số dữ liệu phổ biến trong Meteor.user, Khi làm mới trang u có thể đặt lại. – crapthings

+2

Vâng, nó chỉ là tôi muốn kiên trì ngay cả khi họ không đăng nhập. – Jonovono

Trả lời

0

Session là cửa hàng giá trị khóa toàn cầu, một cửa hàng phản hồi.

http://docs.meteor.com/#session

Session cung cấp một đối tượng toàn cầu trên máy khách mà bạn có thể sử dụng để lưu trữ một bộ tùy ý các cặp khóa-giá trị. Sử dụng nó để lưu trữ những thứ như mục hiện đang được chọn trong danh sách.

Điều đặc biệt về Phiên là phản hồi. Nếu bạn gọi Session.get ("currentList") từ bên trong một mẫu, mẫu sẽ tự động được hiển thị lại bất cứ khi nào Session.set ("currentList", x) được gọi.

Nếu bạn phải duy trì thứ gì đó trong ứng dụng, bạn có thể sử dụng trình duyệt localstorage hoặc cookie nếu bạn quan tâm đến các trình duyệt cũ hơn.

+0

Đó thực sự là những gì gói Amplify làm, ngoại trừ với tất cả các loại hỗ trợ dự phòng. –

1

Vì vậy, tôi nghĩ cách tốt nhất để làm điều này là sử dụng gói amplifyJS.

Đây là Someones ý chính cho thấy làm thế nào họ sử dụng nó: https://gist.github.com/2865146

10

thực tế những gì bạn có thể làm là tạo một "phân lớp" của phiên lưu trữ các giá trị trong cửa hàng Amplify khi set() được gọi. Bạn sẽ tự động kế thừa tất cả các thuộc tính phản ứng của Session. Đây là mã, nó làm việc cho tôi:

SessionAmplify = _.extend({}, Session, { 
    keys: _.object(_.map(amplify.store(), function(value, key) { 
    return [key, JSON.stringify(value)] 
    })), 
    set: function (key, value) { 
    Session.set.apply(this, arguments); 
    amplify.store(key, value); 
    }, 
}); 

Chỉ cần thay thế tất cả các cuộc gọi Session.set/get với SessionAmplify.set/get calls. Khi set() được gọi, phương thức Session cha được gọi, cũng như amplify.store(). Khi "lớp con" được tạo đầu tiên, nó tải mọi thứ nằm trong kho lưu trữ của bên trong các khóa của nó, để chúng có thể được lấy ngay lập tức với get().

Bạn có thể kiểm tra một biến thể làm việc của Leaderboard ví dụ ở đây: https://github.com/sebastienbarre/meteor-leaderboard

+0

làm thế nào tôi có thể sử dụng kỹ thuật này nếu tôi chỉ muốn duy trì một khóa đặc biệt của Session với amplifyjs, nhưng nếu không thì để cho tất cả các phím khác hoạt động như bình thường? có cách nào để thích ứng với phương pháp của bạn không? – Petrov

+0

không chắc chắn nếu sebastien.b là cùng một tác giả, nhưng chính xác mã này có sẵn như là một gói, thông qua cài đặt với mrt thêm phiên-khuếch đại. Dự án github ở đây: https://github.com/cramrov/meteor-session-amplify – mozboz

4

tôi vừa tạo gói UserSession cho Atmosphere, mà về cơ bản là một người sử dụng dựa trên dai dẳng Session.

+1

để rõ ràng, gói này lưu các biến phiên trong bộ sưu tập phía máy chủ. nếu bạn đang tìm kiếm lưu trữ phía khách hàng của các biến phiên, điều này là độc đáo đạt được với khuếch đại, theo câu trả lời của sebastien.b. – mozboz

+0

Gói tốt, nhưng nó chuyển tiếp trên userId, có nghĩa là chúng ta cần một người dùng đã đăng nhập. :( –

8

Đây là câu hỏi cũ, nhưng đây là lần truy cập thứ hai về tìm kiếm "trình quản lý phiên sao băng", vì vậy tôi nghĩ rằng điều quan trọng là phải thêm gói u2622: phiên kiên trì giải quyết vấn đề này một cách hoàn hảo.

từ các tài liệu tại địa chỉ: https://atmospherejs.com/u2622/persistent-session

Lắp đặt

sao băng thêm u2622: dai dẳng phiên

Vậy là xong! Bây giờ bạn có thể sử dụng Phiên.setPersistent để đặt phiên biến sẽ lưu sau khi làm mới.

Nếu bạn muốn, bạn cũng có thể có Session.set thực hiện việc này. Xem phần Tùy chọn bên dưới.

+0

Cảm ơn vì điều này. Nó làm việc cho tôi Chỉ có điều tôi cần thay đổi trong mã của mình là: thay đổi Session.set (.. thành Session.setAuth (; và Session.clearAuth (.. khi đăng xuất. –

+0

có thể hữu ích ở đây để lưu ý rằng, dưới mui xe của phiên dai dẳng, nó khuếch đại chỉ thats làm việc !! –