cari

Rumah  >  Soal Jawab  >  teks badan

PHP: Gunakan sesi pada halaman tanpa mengganggu sesi memuatkan pada halaman lain

<p>Saya menggunakan CURL untuk memuat turun fail besar daripada URL luaran dan menyimpannya pada pelayan saya. Ini mungkin mengambil masa beberapa minit. Semasa muat turun, saya menggunakan curl_setopt($ch, CURLOPT_PROGRESSFUNCTION,.. untuk menjalankan fungsi tanpa nama, mengemas kini pembolehubah $_SESSION['download_progress'] saya secara berkala untuk mendapatkan maklumat muat turun semasa.</p> <p>Sekarang, semua ini berlaku dalam fail upload.php, dan sementara pengguna menunggu fail dimuat turun, saya menggunakan JavaScript untuk meminta halaman progress.php, yang mengandungi kod mudah ini: </p> <pre class="brush:php;toolbar:false;">session_start(); echo $_SESSION['download_progress'];</pre> <p>Ini membenarkan kod JavaScript saya memaparkan maklumat tentang kemajuan muat turun. </p> <p>Kecuali ia tidak berfungsi. </p> <p>Halaman "progress.php" tidak akan dimuatkan sehingga "upload.php" selesai dimuatkan (dengan kata lain, dua halaman tidak dimuatkan sehingga selepas fail selesai dimuat turun), itu adalah buruk. session_start() entah bagaimana menghalang halaman "progress.php" daripada dimuatkan. Saya menggunakan pelayan saya sendiri (apache php 5.4) jadi saya mempunyai semua hak pentadbir. </p> <p>Bagaimanakah saya hendak menyelesaikan masalah ini? Saya boleh menggunakan beberapa penyelesaian yang tidak sedap dipandang, seperti menulis maklumat muat turun ke fail teks dan bukannya pembolehubah sesi, dan kemudian menggunakan JavaScript untuk membaca fail teks itu secara terus, tetapi saya lebih suka tidak melakukannya. Terima kasih</p><p><br /></p>
P粉006977956P粉006977956498 hari yang lalu549

membalas semua(1)saya akan balas

  • P粉638343995

    P粉6383439952023-08-09 11:37:21

    Anda mengalami isu sesi berasaskan sistem fail. Skrip muat naik mengunci fail bahagian belakang sesi semasa pelaksanaan, jadi maklumat sesi tidak boleh diakses sehingga kunci dilepaskan.

    Yang paling mudah ialah membiarkan skrip muat naik anda dikeluarkan secara berkala dan mengunci semula sesi pada masa yang sama, ini memberi peluang kepada skrip kemajuan anda untuk membaca sesi.

    Untuk melepaskan kunci sesi, panggil session_write_close di mana-mana dalam skrip muat naik. Melakukannya akan menghalang anda daripada mengakses pembolehubah sesi sehingga session_start dipanggil semula kemudian. Anda boleh mengulangi kitaran ini.

    Ada penyelesaian lain yang lebih berkuasa. Sebagai contoh, anda boleh mengalihkan maklumat kemajuan ke beberapa mekanisme storan yang tidak mempunyai kunci semasa pelaksanaan skrip anda boleh mengenal pasti setiap maklumat pengguna berdasarkan ID sesi (jika sesi wujud, anda tidak perlu memulakannya; dapatkan IDnya )

    balas
    0
  • Batalbalas