Cara biasa untuk berkongsi sesi merentas berbilang tapak termasuk:
•Gunakan perkhidmatan keadaan automatik .net (perkhidmatan keadaan asp.net);
•Gunakan pangkalan data sesi .net;
•Gunakan memcached.
•Gunakan kuki untuk mencapai perkongsian antara berbilang tapak (kaedah ini hanya terhad kepada kes di mana beberapa tapak berada dalam nama domain yang sama
Di sini kami akan berlatih menyimpan sesi dalam bentuk pangkalan data untuk mencapai Berbilang); -sesi perkongsian tapak.
Mula-mula kami membina tapak, seperti yang ditunjukkan di bawah:
default.aspx
Terdapat dua butang, setsession digunakan terutamanya untuk menetapkan nilai kepada sesi (seperti: session["sharevalue"] = "abcd"),
getsession digunakan terutamanya untuk mendapatkan nilai sesi.
Kod khusus adalah seperti berikut:
Itu sahaja bahagian kod...
Langkah seterusnya ialah mengkonfigurasi web .config. Sebenarnya, Tujuan utama adalah untuk menambah dua nod machinekey dan sessionstate ke nod
1 Penyataan standard msdn: "Tambahkan kunci untuk Konfigurasikannya supaya ia digunakan untuk menyulitkan dan menyahsulit borang data kuki pengesahan dan melihat data keadaan, dan untuk mengesahkan identiti keadaan sesi di luar proses. "Maksudnya, banyak penyulitan asp.net bergantung pada nilai dalam kekunci mesin, seperti penyulitan kuki pengesahan borang dan keadaan pandangan. Secara lalai, konfigurasi asp.net dijana secara dinamik dengan sendirinya. Jika pelayan tunggal tidak bermasalah, tetapi jika berbilang pelayan seimbang beban, kunci mesin juga dijana secara dinamik Nilai kunci mesin pada setiap pelayan adalah tidak konsisten, mengakibatkan keputusan penyulitan yang tidak konsisten dan keadaan pandangan tidak boleh dikongsi, jadi untuk pengimbangan beban berbilang pelayan kes ini, kunci mesin yang sama mesti dikonfigurasikan pada setiap tapak Anda boleh menyemak maklumat lain untuk mendapatkan butiran.
2. Tambah sessionstate terutamanya untuk menyimpan sesi dalam pangkalan data.
Konfigurasi khusus adalah seperti berikut:
Salin kod Kodnya adalah seperti berikut:
Konfigurasi pangkalan data:
Gunakan alat aspnet_regsql.exe
Selepas asp.net versi 2.0, Microsoft menyediakan alat aspnet_regsql.exe untuk mengkonfigurasi dengan mudah pangkalan data sesi. Alat ini terletak dalam folder "nombor versi direktori microsoft.netframework" pada pelayan web
Contoh penggunaan:
aspnet_regsql.exe -s . p 123456 -ssadd -sstype p
-s parameter:
mewakili nama contoh pangkalan data Anda boleh menggunakan "." untuk mewakili mesin setempat -u dan -p:
mewakili nama pengguna dan kata laluan
-e Parameter:
Anda boleh memilih kumpulan antara -u -p dan -e bermaksud log masuk ke pangkalan data melalui pengesahan windows sebagai pengguna sistem semasa, dan -u -p menggunakan pengguna sqlserver untuk log masuk ke pangkalan data
-ssadd / –ssremove parameter:
-ssadd bermaksud menambah pangkalan data sesi, -ssremove bermaksud mengalih keluar pangkalan data sesi
keterangan parameter sstype:
t
Simpan data sesi dalam pangkalan data tempdb pelayan sql. Ini ialah tetapan lalai. Jika data sesi disimpan dalam pangkalan data tempdb, data sesi akan hilang apabila pelayan sql dimulakan semula.
Simpan data sesi dalam pangkalan data aspstate dan bukannya pangkalan data tempdb.
c
Simpan data sesi ke dalam pangkalan data tersuai. Jika anda menentukan pilihan c, anda juga mesti memasukkan nama pangkalan data tersuai menggunakan pilihan -d.
Tetapan saya ialah: aspnet_regsql.exe -s . Kami telah mendapat perkara asas. .
Kini kami menggunakan tapak web yang baru kami bina untuk iis. Tetapi memandangkan kami ingin memuatkan. Sekurang-kurangnya dua salinan harus digunakan.
Kami menukar "Pelayan 1" dalam defaut.aspx dalam salah satu pelayan kepada "Pelayan 2".
Butirannya adalah seperti berikut:
URL bagi kedua-dua tapak web ialah:
pelayan 1: 127.0.0.1:8081;
pelayan 2: 127.0.0.1:8080;
ok. Seterusnya kita sedang mengkonfigurasi nignx.
Mula-mula cari fail nginx.conf dalam fail konfigurasi nginxconf, buka dengan Notepad,
Buat tetapan di atas:
OK. Jika nginx dikonfigurasikan seperti ini, ia akan menjadi ok. Mari mulakan nginx..
Masukkan url yang kami konfigurasikan dalam nginx dalam penyemak imbas, seperti: 127.0.0.1:8090
Kami akan melihat Pelayan 1 telah mula berkhidmat kepada kami. Mari klik "setsession" sekali lagi untuk menetapkan nilai sesi. Pada masa ini, kita klik "getsesion" sekali lagi untuk melihat nilai sesi yang baru ditetapkan pada pelayan 1. Hasilnya adalah seperti berikut:
Apabila ini berlaku, perkara utama ialah untuk menyimpan Sesi antara pelayan 1 dan perkhidmatan 2 tidak dikongsi semasa sesi, terutamanya disebabkan oleh sessionid dalam
jadual aspstatetempsessions,
di mana sessionid merangkumi Dua bahagian: sessionid 24-bit dan nama aplikasi 8-bit yang dijana oleh tapak web yang berbeza, nama aplikasi adalah berbeza Jika sessionid 24-bit boleh dibuat sama pada tapak yang berbeza, ia mesti dipastikan sessionid selepas menggabungkan dan menambah appname adalah sama Anda boleh mengubah suai prosedur tempgetappid supaya sessionid yang diperolehi tiada kaitan dengan appname seperti berikut:
Salin kod tersebut. seperti berikut:ubah prosedur [dbo].[tempgetappid]
@appname tappname,@appid int output
sebagaiset @appname = 'test' - -lower(@appname) Ubah suai ini supaya appname berbilang tapak ialah nilai tetap.
tetapkan @appid = null
pilih @appid = appid
daripada [awbuisession].dbo.aspstatetempapplications
di mana appname = @appname
jika @appid batal bermula
mulakan tran
pilih @appid = appid
daripada [awbuisession].dbo.aspstatetempapplications dengan (tablockx)
di mana appname = @appname
jika @appid adalah batal
mulakan
exec gethashcode @appname, @appid output
masukkan [awbuisession].dbo.aspstatetempapplications
nilai
(@appid, @appname)
jika @@error = 2627
mulakan
deklarasikan @dupapp tappname
pilih @dupapp = rtrim(appname)
daripada [awbuisession].dbo.aspstatetempapplications
where appid = @appid
raiserror('keadaan sesi sql ralat maut: perlanggaran kod cincang antara aplikasi ''%s '' dan ''%s'' sila namakan semula aplikasi pertama untuk menyelesaikan masalah.',
18, 1, @appname, @dupapp)
tamatkan
tamatkan
komit
tamat
kembali 0
Selepas pengubahsuaian di atas, adalah perlu untuk menyedari bahawa berbilang tapak berkongsi sessionid yang sama.
Klik “setsession”,
Klik lagi: “getsession”
Dengan cara ini kita dapat melihat pelayan 2 memberikan nilai sesi yang baru kita tetapkan dalam pelayan 1.
Mari klik "getsession" sekali lagi
Anda boleh melihat bahawa Pelayan 1 dan Pelayan 2 mengembalikan hasil yang sama, mencapai sesi "perkongsian berbilang tapak". ”
Titik tambahan: tamat tempoh sesi dipadamkan, terutamanya apabila kerja dalam ejen pelayan sql selesai.
Atas ialah kandungan terperinci Cara nginx melaksanakan pengimbangan beban dan sesi perkongsian berbilang tapak. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!