Rumah >pembangunan bahagian belakang >masalah PHP >Apakah yang perlu saya lakukan jika php tidak boleh lulus sesi?

Apakah yang perlu saya lakukan jika php tidak boleh lulus sesi?

藏色散人
藏色散人asal
2021-10-15 09:17:002131semak imbas

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.

Apakah yang perlu saya lakukan jika php tidak boleh lulus sesi?

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

6401729e56ea83549d108911b3193a85Halaman seterusnya5db79b134e9f6b82c0b36e0489ee08ed " ;
bergema , $url ;                                     ?>

e3d3bcd7760b5856259b13cb9de4d4be

Jalankan kod di atas. Jika kuki pelanggan adalah normal, anda sepatutnya boleh mendapatkan hasil "Republik Rakyat China".
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"


Inilah pendekatan 1 yang dinyatakan di atas.

Mari kita bincangkan tentang pendekatan 2 di bawah:

Kod yang diubah suai adalah seperti berikut:

s1.php


70c8c0305afe6351c4c1b686323095e5Halaman seterusnya5db79b134e9f6b82c0b36e0489ee08ed " ;
bergema , $url ;                                           ?>


s2.php Kaedah 3: log masuk.html

14e94af05060d7501799dd0edbee97b6

34a75bb83fcae34a10d21573714b7866                                                          7431fa5f422ef8e5e45a956159381c8b52dd87091aa341f69243e9cf115e11a1                              
d1f5e380f63874c43be6e7abbdb0aeaa Log masuk 712d50df033512dd4a1cd9e88ccae4be                                                                                                                         30fd54e9d4fd55fd22567a0f794ae9f1

105fd0c07cff4088d956b300ebadf48e                                                                                                                                                   ec5d9317a77877b18b5f23a1168221c5 Sila log masuk:                                              9f7a6a6e259f22bd462a30e407413220                                                 
用户名   :d7a5fca69973d68e2339bb7b45eaac432cd52db9b797f2c7ecc9db34e8bbc4a4                              
口 令   :df2d228f2843716a6cea3ba9e2d6ae672cd52db9b797f2c7ecc9db34e8bbc4a4                          
  3276a49384aebb1b5b6cb203393afdd6                                      
  d8087203fcd26d1baaaae940ae67b360                                                                
  1c7fcca9733ce47547ab330ffa4b5afd                                                                
  4a638ae04d15c042ea58e396894920d5      

 

mylogin1.php

<?   php

   $name   =   $_POST   [   &#39;   name   &#39;   ];
   $pass   =   $_POST   [   &#39;   pass   &#39;   ];
   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   [   &#39;   user   &#39;   ]   =       $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!

Kenyataan:
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