Rumah >pembangunan bahagian belakang >masalah PHP >Apakah yang perlu saya lakukan jika php tidak boleh lulus sesi?
Penyelesaian kepada masalah yang PHP tidak dapat memindahkan sesi: 1. Dayakan kuki dalam klien 2. Semak isu pelayar dan akses kuki 3. Dayakan session.use_trans_sid dalam php.ini.
Persekitaran pengendalian artikel ini: sistem Windows 7, PHP versi 7.1, komputer DELL G3
Penyelesaian kepada masalah yang SESSION tidak boleh dilalui merentasi halaman dalam PHP
Rakan yang telah menggunakan SESSION dalam PHP mungkin menghadapi masalah seperti itu, pembolehubah SESSION tidak boleh dihantar merentasi halaman . Ini menyusahkan saya selama beberapa hari, dan akhirnya saya memikirkan dan menyelesaikan masalah ini dengan mencari maklumat. Saya rasa sebab masalah ini adalah seperti berikut:
1. Kuki dilumpuhkan pada klien
2. Terdapat masalah dengan pelayar dan kuki tidak boleh diakses buat sementara waktu
3. Sesi dalam php. ini. use_trans_sid = 0 atau pilihan --enable-trans-sid tidak dihidupkan semasa menyusun
Mengapa ini berlaku? Biar saya terangkan di bawah:
Sesi disimpan di bahagian pelayan (sesi disimpan sebagai fail secara lalai. Fail pengguna diperoleh mengikut id sesi yang disediakan oleh klien, dan nilai pembolehubah). diperolehi. Id sesi boleh menggunakan kuki klien Atau Query_String protokol Http1.1 (bahagian selepas "?" URL yang diakses) dihantar ke pelayan, dan kemudian pelayan membaca direktori Sesi. Dengan kata lain, id sesi ialah kad ID yang memperoleh pembolehubah sesi yang disimpan pada perkhidmatan. Apabila kod session_start(); dijalankan, fail sesi dijana pada pelayan, dan id sesi yang sepadan dengannya dijana Pembolehubah sesi ditakrifkan untuk disimpan dalam fail sesi yang baru dijana dalam bentuk tertentu. Melalui id sesi, pembolehubah yang ditentukan boleh diambil semula. Selepas melintasi halaman, untuk menggunakan sesi, anda mesti melaksanakan session_start() sekali lagi fail sesi lain akan dihasilkan, dan id sesi yang sepadan akan dijana dengan sewajarnya di atas. pembolehubah masuk kerana id sesi ini bukan "kunci" untuk membukanya. Jika anda menambah kod session_id($session id); sebelum session_start();, fail sesi baharu tidak akan dijana dan fail sesi yang sepadan dengan id ini akan dibaca terus.
Sesi dalam PHP menggunakan kuki pelanggan untuk menyimpan id sesi secara lalai, jadi apabila terdapat masalah dengan kuki pelanggan, ia akan menjejaskan sesi. Perlu diingatkan bahawa sesi tidak semestinya bergantung pada kuki, yang juga merupakan kecemerlangan sesi berbanding kuki. Apabila kuki pelanggan dilumpuhkan atau terdapat masalah, PHP akan melampirkan id sesi secara automatik pada URL, supaya pembolehubah sesi boleh digunakan merentas halaman melalui id sesi. Tetapi lampiran ini juga mempunyai syarat tertentu, iaitu "session.use_trans_sid = 1 dalam php.ini atau pilihan --enable-trans-sid dihidupkan semasa penyusunan".
Memahami prinsip di atas, sekarang mari kita ketepikan kuki dan menggunakan sesi Terdapat tiga cara utama:
1 Set session.use_trans_sid = 1 dalam php.ini atau hidupkan semasa penyusunan . Pilihan --enable-trans-sid ditambahkan untuk membolehkan PHP menghantar id sesi secara automatik merentasi halaman.
2. Hantar nilai secara manual melalui URL dan hantar id sesi melalui borang tersembunyi.
3. Simpan session_id dalam fail, pangkalan data, dsb., dan panggil secara manual semasa proses merentas halaman.
Mari kita ilustrasikan dengan contoh:
s1.phps2.php
Kini jika anda menutup kuki pada klien secara manual dan menjalankannya semula, anda mungkin tidak mendapat hasilnya. Jika anda tidak boleh mendapatkan hasilnya, maka "set session.use_trans_sid = 1 dalam php.ini atau hidupkan pilihan --enable-trans-sid semasa menyusun", dan anda akan mendapat hasil "Republik Rakyat China"
6401729e56ea83549d108911b3193a85Halaman seterusnya5db79b134e9f6b82c0b36e0489ee08ed " ;
bergema , $url ; ?>
![]()
Jalankan kod di atas. Jika kuki pelanggan adalah normal, anda sepatutnya boleh mendapatkan hasil "Republik Rakyat China".
e3d3bcd7760b5856259b13cb9de4d4be
![]()
Inilah pendekatan 1 yang dinyatakan di atas.
Mari kita bincangkan tentang pendekatan 2 di bawah:
Kod yang diubah suai adalah seperti berikut:
s1.php70c8c0305afe6351c4c1b686323095e5Halaman seterusnya5db79b134e9f6b82c0b36e0489ee08ed " ;bergema , $url ; ?>
![]()
s2.php Kaedah 3:log masuk.html
34a75bb83fcae34a10d21573714b7866 7431fa5f422ef8e5e45a956159381c8b52dd87091aa341f69243e9cf115e11a1
14e94af05060d7501799dd0edbee97b6
d1f5e380f63874c43be6e7abbdb0aeaa Log masuk 712d50df033512dd4a1cd9e88ccae4be 30fd54e9d4fd55fd22567a0f794ae9f1
105fd0c07cff4088d956b300ebadf48e ec5d9317a77877b18b5f23a1168221c5 Sila log masuk: 9f7a6a6e259f22bd462a30e407413220
用户名 :d7a5fca69973d68e2339bb7b45eaac432cd52db9b797f2c7ecc9db34e8bbc4a4
口 令 :df2d228f2843716a6cea3ba9e2d6ae672cd52db9b797f2c7ecc9db34e8bbc4a4
3276a49384aebb1b5b6cb203393afdd6
d8087203fcd26d1baaaae940ae67b360
1c7fcca9733ce47547ab330ffa4b5afd
4a638ae04d15c042ea58e396894920d5
mylogin1.php
<? php $name = $_POST [ ' name ' ]; $pass = $_POST [ ' pass ' ]; if ( ! $name || ! $pass ) { echo " 用户名或密码为空,请<a href="login.html">重新登录</a> " ; die (); } if ( ! ( $name == " laogong " && $pass == " 123 " )) { echo " 用户名或密码不正确,请<a href="login.html">重新登录</a> " ; die (); } // 注册用户 ob_start (); session_start (); $_SESSION [ ' user ' ] = $name ; $psid = session_id (); $fp = fopen ( " e:/tmp/phpsid.txt " , " w+ " ); fwrite ( $fp , $psid ); fclose ( $fp ); // 身份验证成功,进行相关操作 echo " 已登录<br> " ; echo " <a href="mylogin2.php">下一页</a> " ; ?>mylogin2.php
e920eeae39d293d735292c5ecf9df016log masuk5db79b134e9f6b82c0b36e0489ee08ed " ;
mati ();
}
?>
![]()
Sila matikan juga ujian cookie Nama pengguna: laogong Kata laluan: 123 Ini untuk menyimpan id sesi melalui fail: e:/tmp/phpsid.txt Sila tentukan nama fail atau laluan mengikut sistem anda sendiri.
Bagi kaedah pangkalan data, saya tidak akan memberi contoh, ia sama dengan kaedah fail.
Untuk meringkaskan, kaedah di atas mempunyai satu persamaan, iaitu mendapatkan id sesi pada halaman sebelumnya, dan kemudian mencari cara untuk menghantarnya ke halaman seterusnya Tambahkan kod session_id ) sebelum session_start(); kod pada halaman seterusnya id sesi);
Pembelajaran yang disyorkan: "Tutorial Video PHP"
Atas ialah kandungan terperinci Apakah yang perlu saya lakukan jika php tidak boleh lulus sesi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!