PHP: Gunakan sesi pada halaman tanpa mengganggu sesi memuatkan pada halaman lain
P粉006977956
P粉006977956 2023-08-08 13:05:15
0
1
477

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.

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:

session_start(); echo $_SESSION['download_progress'];

Ini membenarkan kod JavaScript saya memaparkan maklumat tentang kemajuan muat turun.

Kecuali ia tidak berfungsi.

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.

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粉006977956
P粉006977956

membalas semua (1)
P粉638343995

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 )

    Muat turun terkini
    Lagi>
    kesan web
    Kod sumber laman web
    Bahan laman web
    Templat hujung hadapan
    Tentang kita Penafian Sitemap
    Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!