Mekanisme pelaksanaan Sesi di Golang dan penyelesaian aplikasinya

PHPz
Lepaskan: 2023-04-23 11:26:03
asal
1363 orang telah melayarinya

Dengan peningkatan aplikasi web, protokol HTTP telah menjadi salah satu protokol terpenting dalam pembangunan web. Mekanisme Sesi ialah salah satu teknologi utama dalam pembangunan Web, digunakan untuk menjejak status peminta untuk melaksanakan log masuk pengguna, pengurusan kebenaran dan fungsi lain. Untuk melaksanakan mekanisme sesi, pembangun perlu bergantung pada beberapa perpustakaan atau rangka kerja pihak ketiga, dan Golang menyediakan sokongan asli untuk Sesi.

Artikel ini akan memperkenalkan secara terperinci mekanisme pelaksanaan Sesi di Golang dan penyelesaian aplikasinya.

Apakah itu Sesi

Sesi, juga dikenali sebagai sesi, dalam pembangunan web merujuk kepada sekeping maklumat dalam pelayan yang menyimpan status yang berkaitan dengan sesi klien. Biasanya, Sesi ialah beberapa maklumat yang diselenggara oleh pelayan supaya permintaan pelanggan boleh diproses dengan betul.

Maklumat Sesi Biasa termasuk status log masuk pengguna, maklumat troli beli-belah, sejarah penyemakan imbas, dsb. Maklumat ini boleh merekod dan mengekalkan status pelanggan dengan berkesan, membolehkan aplikasi web melaksanakan beberapa fungsi berguna.

Sesi di Golang

Di Golang, mekanisme Sesi dilaksanakan melalui Kuki HTTP. Kuki adalah mekanisme untuk menyimpan status pengguna dalam pelayar web dan digunakan secara meluas dalam pembangunan aplikasi web. Dengan bantuan mekanisme kuki, Golang boleh membantu kami menjejaki status sesi pengguna.

Untuk Golang, kami boleh melaksanakan mekanisme Sesi dengan menggunakan perpustakaan pihak ketiga. Pada masa ini, pustaka Sesi yang paling popular ialah gorilla/sessions. Pustaka ini menyediakan kaedah untuk melaksanakan pengurusan sesi menggunakan Kuki HTTP, menyokong berbilang kaedah storan bahagian belakang dan mempunyai kemudahan penggunaan dan kebolehpercayaan yang tinggi pada masa ini Ia merupakan penyelesaian pelaksanaan Sesi yang paling popular di Golang.

Mari perkenalkan cara menggunakan pustaka gorilla/sessions untuk melaksanakan mekanisme Sesi di Golang.

Gunakan pustaka gorilla/sessions untuk melaksanakan Sesi

Pasang perpustakaan gorila/sesi

Sebelum menggunakan pustaka gorilla/sessions, kami perlu memasangnya terlebih dahulu. Di Golang, anda boleh memasangnya melalui baris arahan:

go get github.com/gorilla/sessions
Salin selepas log masuk

Selepas melaksanakan arahan ini, Golang akan memuat turun dan memasang fail perpustakaan ke komputer setempat. Selepas itu, kita boleh mula menggunakan perpustakaan ini.

Buat Sesi

Sebelum menggunakan pustaka gorilla/sessions, kita perlu mencipta tika Sesi. Mencipta Sesi boleh dicapai dengan memanggil fungsi NewCookieStore, seperti yang ditunjukkan di bawah:

store := sessions.NewCookieStore([]byte("something-very-secret"))
Salin selepas log masuk

NewCookieStore Fungsi akan mengembalikan penunjuk jenis *sessions.CookieStore, yang merupakan contoh Sesi kami.

Fungsi ini memerlukan satu parameter, iaitu rentetan rawak yang digunakan untuk menyulitkan dan menyahsulit kandungan Kuki. Kami perlu menjana rentetan rawak selamat untuk penyulitan Sesi dalam persekitaran pengeluaran. Rentetan pendek boleh digunakan untuk ujian dalam persekitaran pembangunan.

Tetapkan Sesi

Selepas mencipta tika Sesi, kita perlu menggunakannya untuk menyediakan Sesi. Dalam pustaka gorilla/sessions, menyediakan Sesi dilakukan terutamanya dalam dua cara:

  • melaksanakan Pack()Unpack() enkapsulasi
  • dan
  • dengan mengakses Set() dan Get() kaedah Pelaksanaan kaedah

Di bawah ini kami akan memperkenalkan pelaksanaan khusus kedua-dua kaedah ini.

Kaedah 1: Akses kaedah Pack() dan Unpack()

Untuk kaedah pertama, apabila menyediakan Sesi, kita perlu terlebih dahulu membungkus dan menyimpan data dalam Sesi, dan maka perlu menyelesaikannya data pakej untuk mendapatkannya.

session, err := store.Get(r, "session-name")
if err != nil {
  // 处理错误
}
session.Values["username"] = username
session.Values["name"] = name
err = session.Save(r, w)
if err != nil {
  // 处理错误
}
Salin selepas log masuk

Selepas menambah data yang perlu disimpan, kami menyimpannya dalam Sesi, dan kemudian memanggil kaedah session.Save() untuk menyimpan data ke Kuki.

Apabila kita perlu mengakses data yang disimpan dalam Sesi, kita perlu memanggil kaedah Unpack() untuk membongkar data.

session, err := store.Get(r, "session-name")
if err != nil {
  // 处理错误
}
username := session.Values["username"].(string)
name := session.Values["name"].(string)
Salin selepas log masuk

Dapatkan nilai dalam Sesi dengan mengakses atribut Values Baris kod berikut akan mengembalikan nilai rentetan pembolehubah nama pengguna Jika anda ingin menukar nilai kepada jenis lain, anda boleh gunakan penegasan jenis.

Kaedah 2: Merangkumkan Set() dan Get() kaedah

Untuk kaedah kedua, kita boleh melaksanakannya dengan merangkum kaedah Set() dan Get().

func SetSessionValue(r *http.Request, w http.ResponseWriter, key string, value interface{}) error {
  session, err := store.Get(r, "session-name")
  if err != nil {
    return err
  }
  session.Values[key] = value
  return session.Save(r, w)
}

func GetSessionValue(r *http.Request, key string) (interface{}, error) {
  session, err := store.Get(r, "session-name")
  if err != nil {
    return nil, err
  }
  return session.Values[key], nil
}
Salin selepas log masuk

Kami telah merangkumkan logik menyimpan dan mendapatkan semula Sesi ke dalam kaedah SetSessionValue() dan GetSessionValue(), yang boleh mengurangkan pertindihan kod.

Kawalan tamat masa sesi

Sesi ialah mekanisme berdasarkan Kuki dan tempoh sah Kuki adalah sangat terhad. Untuk mengelakkan maklumat Sesi daripada tamat tempoh, tamat masa Sesi perlu dikawal.

Dalam pustaka gorilla/sessions, anda boleh mengawal tempoh sah Sesi dengan menetapkan sifat MaxAge bagi tika Sesi. Unit sifat MaxAge ialah saat, jadi anda boleh menggunakan kod berikut untuk menetapkan Sesi dengan tamat masa selama 30 minit:

store.Options.MaxAge = 1800 // 30分钟
Salin selepas log masuk

Apabila MaxAge ditetapkan kepada nombor negatif, Sesi tidak akan tamat tempoh. . Apabila nilai MaxAge ialah 0, Sesi akan dipadamkan apabila penyemak imbas ditutup.

Session的验证和鉴定

Session是多用户共享的,因此应用程序必须验证客户端的请求是否属于正确的用户,并且请求是在有效期内发送的。另外,应用程序也必须验证请求者是否具有足够的权限来执行请求的操作。

对于Session的验证和鉴定,gorilla/sessions库内置了IsAuthenticated()方法,它可以检查当前Session是否已经验证。该方法可以用于确保只有登录的用户才可以访问受保护的页面。

if !IsAuthenticated(r) {
    http.Redirect(w, r, "/login", http.StatusSeeOther)
    return
}
Salin selepas log masuk

另外,对于对于请求的授权,我们也可以在Session中保存一些关于请求者的信息,然后通过验证这些信息来确定是否允许执行操作。例如,我们可以使用下面的代码向Session中保存一个userRole值,表示请求的用户所属的角色:

session.Values["userRole"] = "admin"
Salin selepas log masuk

然后,在进行授权操作时,我们可以从Session中读取该值,从而判断请求者是否具有足够的权限。

Session的存储后端

在使用gorilla/sessions库时,可以使用不同的后端存储类型来存储Session数据。默认情况下,gorilla/sessions库使用cookie作为存储后端,但是它也支持其他类型的后端,如Memcache、Redis、MongoDB等。

下面是使用Memcache作为存储后端的示例代码:

import (
    "github.com/bradfitz/gomemcache/memcache"
    "github.com/gorilla/sessions"
)

func main() {
    mc := memcache.New("localhost:11211")
    store := sessions.NewMemcacheStore(mc, "", []byte("something-very-secret"))
}
Salin selepas log masuk

通过调用sessions.NewMemcacheStore()方法,我们可以创建一个基于Memcache后端的Session存储。该方法需要三个参数:Memcache客户端、可选的名字和随机的字符串用于加密和解密Cookie内容。

在实际应用中,我们可以根据需求选择不同的后端存储类型,并将它配置到Session存储中,以便更好地管理Session信息。

总结

Session机制是Web应用中的重要组成部分,可以用于跟踪客户端状态,实现用户的登录和权限等功能。在Golang中,可以借助gorilla/sessions库来实现Session机制,它提供了灵活易用的API和多种后端存储方式,适合于不同规模和复杂度的Web应用场景。

本文介绍了如何使用gorilla/sessions库实现Golang中的Session机制,包括创建和设置Session、超时控制、验证和鉴定等方面的内容。通过使用本文所介绍的内容,开发者可以更好地理解和应用Golang中的Session机制。

Atas ialah kandungan terperinci Mekanisme pelaksanaan Sesi di Golang dan penyelesaian aplikasinya. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!