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"
php
sesi_mula (); $_SESSION [ ' var1 ' ] = " Republik Rakyat China " ;
$url = " Halaman seterusnya " ;
bergema , $url ; ?>
![]()
Jalankan kod di atas. Jika kuki pelanggan adalah normal, anda sepatutnya boleh mendapatkan hasil "Republik Rakyat China".
php
sesi_mula (); bergema , " Nilai pembolehubah sesi yang diluluskan var1 ialah: " . $_SESSION [ ' var1 ' ];
?>
![]()
Inilah pendekatan 1 yang dinyatakan di atas.
Mari kita bincangkan tentang pendekatan 2 di bawah:
Kod yang diubah suai adalah seperti berikut:
s1.phpphp
sesi_mula (); $_SESSION [ ' var1 ' ] = " Republik Rakyat China " ; $sn , = , session_id (); $url = " Halaman seterusnya " ;
bergema , $url ; ?>
![]()
s2.php Kaedah 3:log masuk.html
< html >< kepala >
php
session_id ( $_DAPAT [ ' s ' ]); sesi_mula (); bergema , " Nilai pembolehubah sesi yang diluluskan var1 ialah: " . $_SESSION [ ' var1 ' ];
?>
< tajuk > Log masuk tajuk > < meta http - equiv = " Jenis Kandungan " kandungan = " teks/html; charset=GB2312 " >
kepala > < badan > Sila log masuk: < nama borang = " log masuk " kaedah = " Pos " ,
tindakan = " mylogin1.php " >
用户名 :< jenis input = " teks " nama = " nama " >< br >
口 令 :< jenis input = " kata laluan " nama = " lulus " >< br >
< jenis input = " menyerahkan " nilai = " 登录 " >
bentuk >
badan >
html >
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> " ; ?>Salin selepas log masukmylogin2.php
php
$fp = fopen ( " e:/tmp/phpsid.txt " , " r " );
$sid = ketakutan ( $fp , 1024 );
tutup ( $fp );
session_id ( $sid );
sesi_mula ();
jika ( isset ( $_SESSION [ ' pengguna ' ]) && , $_SESSION [ ' pengguna ' ] = " laogong " ) {
bergema , " Sudah log masuk! " ;
}
lain {
// Berjaya log masuk untuk melaksanakan operasi berkaitan
bergema , " Tidak log masuk, tiada hak akses " ;
bergema , " Silalog masuk " ;
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!