Sessions: Sesi Lintas Server Web

Dibuat pada 24 Jul 2016  ·  11Komentar  ·  Sumber: gorilla/sessions

Dimungkinkan untuk membuat sesi lintas server dengan menggunakan gorila/sesi? Asumsikan saya memiliki beberapa server untuk melayani satu situs web. Jika pengguna login di satu server, saya berharap dia juga login di server lain.

question

Komentar yang paling membantu

@CasperHK Itulah yang Anda dapatkan secara default dengan cookie: selama server adalah bagian dari domain yang sama (misalnya github.com, atau *.github.com) maka cookie akan dikirim oleh browser.

Atau, sesi juga mendukung penyimpanan sisi server - semua server harus dapat terhubung ke toko itu (baik itu Redis, atau PostgreSQL, dll).

Semua 11 komentar

@CasperHK Itulah yang Anda dapatkan secara default dengan cookie: selama server adalah bagian dari domain yang sama (misalnya github.com, atau *.github.com) maka cookie akan dikirim oleh browser.

Atau, sesi juga mendukung penyimpanan sisi server - semua server harus dapat terhubung ke toko itu (baik itu Redis, atau PostgreSQL, dll).

gorilla/session sepertinya bagus untuk tugas saya. Sebenarnya, saya ingin menggunakan Go pada proyek tahun terakhir saya di universitas saya dan sekarang saya memiliki 12 server ubuntu di bawah domain yang sama. Beberapa dari mereka akan digunakan sebagai server web dan satu akan digunakan sebagai server database MySQL. Oleh karena itu, saya ingin menerapkan layanan sesi berbasis MySQL untuk memungkinkan data sesi disinkronkan di semua server web.
Sebelumnya saya mencoba memprogram sesi cross server berbasis MySQL. Jika srinathgs/mysqlstore memberikan cara yang lebih mudah untuk melakukan hal yang sama, itu bagus bagi saya untuk belajar dan menyederhanakan pekerjaan saya.

Gunakan CookieStore default, dan jika semua server memiliki kunci penandatanganan yang sama,
dan ada di domain yang sama, itu akan berfungsi apa adanya.

Pada Sun, Jul 24, 2016 at 22:48 Casper LI [email protected] menulis:

gorila/sesi tampaknya bagus untuk tugas saya. Sebenarnya, saya ingin menggunakan Go on my
proyek tahun terakhir di universitas saya dan sekarang saya memiliki 12 server ubuntu di bawah
domain yang sama. Beberapa dari mereka akan digunakan sebagai server web dan satu akan menjadi
digunakan sebagai database server MySQL. Oleh karena itu, saya ingin menerapkan a
Layanan sesi berbasis MySQL untuk memungkinkan data sesi disinkronkan di semua web
server.
Sebelumnya saya mencoba memprogram sesi cross server berbasis MySQL. Jika "
github.com/gorilla/sessions" memberikan cara yang lebih mudah untuk melakukan hal yang sama, yaitu
besar bagi saya untuk belajar dan menyederhanakan pekerjaan saya.


Anda menerima ini karena Anda ditugaskan.

Balas email ini secara langsung, lihat di GitHub
https://github.com/gorilla/sessions/issues/87#issuecomment -234845955,
atau matikan utasnya
https://github.com/notifications/unsubscribe-auth/AABIcNfC7H8DrZq5NX1Tu7W_Vd1LM5BIks5qZE43gaJpZM4JTizF
.

Maaf, saya ingin bertanya apa CookieStore default dan kunci penandatanganannya? CookieStore berarti paket gorilla/sessions ?

Ya. Lihatlah http://www.gorillatoolkit.org/pkg/sessions -

  • something-very-secret adalah kunci penandatanganan
  • sessions.NewCookieStore mengembalikan *CookieStore , yang tidak memerlukan database/status bersama antara server Anda.
import (
    "net/http"
    "github.com/gorilla/sessions"
)

var store = sessions.NewCookieStore([]byte("something-very-secret"))

func MyHandler(w http.ResponseWriter, r *http.Request) {
    // Get a session. We're ignoring the error resulted from decoding an
    // existing session: Get() always returns a session, even if empty.
    session, err := store.Get(r, "session-name")
    if err != nil {
        http.Error(w, err.Error(), http.StatusInternalServerError)
        return
    }

    // Set some session values.
    session.Values["foo"] = "bar"
    session.Values[42] = 43
    // Save it before we write to the response/return from the handler.
    session.Save(r, w)
}

Saya telah membaca kodenya. Ketika saya melihat

var store = sessions.NewCookieStore([]byte("something-very-secret")) 

Saya ingin tahu apakah variabel store digunakan di setiap penangan di seluruh proyek. Jika demikian, sepertinya saya perlu membungkusnya dalam paket lain dan membuatnya diekspor. Ini karena saya memisahkan semua penangan yang berbeda dalam paket yang berbeda sesuai dengan halaman mana yang mereka layani, (misalnya index , projbrwsr , codeeditor ) dan penangan tersebut harus memanggil ke sama Store .
image

something-very-secret dikatakan sebagai kunci rahasia tetapi saya tidak tahu apa yang harus saya berikan ke fungsi NewCookieStore() .

Inject store (sessions.Store) sebagai dependensi ke paket Anda yang lain.

Pada Mon, Jul 25, 2016 at 08:57 Casper LI [email protected] menulis:

Saya telah membaca kodenya. Ketika saya melihat

var store = sesi.NewCookieStore([]byte("sesuatu-sangat-rahasia"))

Saya ingin tahu apakah variabel toko digunakan di setiap penangan hingga keluar
proyek. Jika demikian, sepertinya saya perlu membungkusnya dengan paket lain dan
membuatnya diekspor. Ini karena saya memisahkan semua penangan yang berbeda di
paket yang berbeda sesuai dengan halaman yang mereka layani, (misalnya indeks,
projbrwsr, codeeditor) dan handler tersebut harus menelepon ke Store yang sama.
[gambar: gambar]
https://cloud.githubusercontent.com/assets/6957401/17107410/a34dcc50-52c1-11e6-92f7-a4227da60244.png


Anda menerima ini karena Anda ditugaskan.

Balas email ini secara langsung, lihat di GitHub
https://github.com/gorilla/sessions/issues/87#issuecomment -234996994,
atau matikan utasnya
https://github.com/notifications/unsubscribe-auth/AABIcOHzeq8IabUoj-SZx_B-7er-PJf9ks5qZNzsgaJpZM4JTizF
.

sesuatu-sangat-rahasia dikatakan sebagai kunci rahasia tetapi saya tidak tahu apa yang harus saya berikan ke fungsi NewCookieStore().

https://godoc.org/github.com/gorilla/sessions#NewCookieStore

Kunci didefinisikan berpasangan untuk memungkinkan rotasi kunci, tetapi kasus yang umum adalah menyetel kunci autentikasi tunggal dan secara opsional kunci enkripsi.
Kunci pertama dalam pasangan digunakan untuk otentikasi dan yang kedua untuk enkripsi. Kunci enkripsi dapat diatur ke nil atau dihilangkan pada pasangan terakhir, tetapi kunci otentikasi diperlukan di semua pasangan.

NewCookieStore mengambil kunci otentikasi/penandatanganan dan kunci enkripsi (opsional).

Maaf, saya cukup baru di Go. Bisakah Anda menjelaskan lebih lanjut tentang Inject store atau memberi saya tautan untuk penjelasan? Terima kasih.

@CasperHK Minta konstruktor paket Anda menerima dependensinya - mis

  • NewProjectBrowser(store sessions.Store, debug bool) (*ProjectBrowser, error) { ... }
  • NewCodeEditor(store sessions.Store) (*CodeEditor, error) { ... }

Di main.go

func main() {
    // Create a store, and then pass it (inject it) into your other packages via their constructors
    store  := sessions.NewCookieStore(key)
    ...
    ce, err := package.NewCodeEditor(store)
    ...
    pb, err := package.NewProjectBrowser(store)
    ...
}

Tutup karena tidak aktif.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat