cari

Rumah  >  Soal Jawab  >  teks badan

Bagaimana untuk memastikan sesi pengguna aktif walaupun selepas menutup penyemak imbas atau kembali selepas melahu dalam PHP untuk seketika?

<p>Dalam kod saya, saya boleh memilih "Ingat saya", apabila dipilih ia menyimpan nilai e-mel dan kata laluan dalam kuki dan kuki bertahan selama 1 bulan, kini apabila pengguna memasuki halaman semula, Daripada menyimpan sesi aktif, ia mendapat nilai daripada kuki yang disimpan dan memaparkannya pada borang log masuk. Saya sedang menggunakan cloudflare dan pengehosan dan saya telah cuba menyediakan baris kod ini: </p> <pre class="brush:php;toolbar:false;">php_value session.cookie_lifetime 2629800; php_value session.gc_maxlifetime 2629800;</pre> <p>Kedua-duanya berada dalam php.ini dan .htacces, tetapi hasilnya adalah sama (sesi akan ditutup apabila pengguna menutup penyemak imbas). </p> <p>Ini ialah fungsi loginUser, ia mengendalikan log masuk dan mencipta kuki apabila pengguna menyemak "Ingat Saya", yang saya mahukan ialah, dengan menandai "Ingatkan Saya", walaupun pengguna menutup penyemak imbas atau kembali selepas beberapa waktu, Sesi kekal aktif untuk masa tidak aktif, tetapi tempoh sesi ialah 1 bulan (2629800 saat).</p> <pre class="brush:php;toolbar:false;">function loginUser($email, $password, $rememberme) { $mysqli = sambung(); $email = trim($email); $kata laluan = trim($kata laluan); if ($email == "" || $password == "") { kembali 'Kedua-dua medan diperlukan'; } $email = filter_var($email, FILTER_SANITIZE_EMAIL); $kata laluan = filter_var($kata laluan, FILTER_SANITIZE_SPECIAL_CHARS); $sql = "PILIH * DARI pengguna DI MANA e-mel = ? HAD 1"; $stmt = $mysqli->prepare($sql); $stmt->bind_param("s", $email); $stmt->execute(); $result = $stmt->get_result(); $data = $result->fetch_assoc(); jika ($data == NULL) { kembali 'E-mel tidak wujud, daftar untuk masuk'; } if (password_verify ($password, $data["password"]) == FALSE) { kembalikan 'Kata laluan tidak betul, sila semak dan cuba lagi'; } lain { $user_id = $data['user_id']; $_SESSION['auth_user_id'] = $user_id; $_SESSION["pengguna"] = $emel; $_SESSION["lulus"] = $kata laluan; $_SESSION["nama pengguna"] = $data['nama pengguna']; $_SESSION["sahkan"] = $data['sahkan']; $_SESSION["profil"] = $data['Imej profil']; $_SESSION["id"] = $data['user_id']; $_SESSION["vip"] = $data['vip']; setcookie('user_id', $data['user_id'], time() + 60 * 60 * 24 * 30, '/'); jika ($ingat saya) { $cookie_name = 'Ingat_AS'; $cookie_value = json_encode(array('lemail' => $email, 'lpassword' => $password)); $cookie_expire = masa() + (60 * 60 * 24 * 30); setcookie($cookie_name, encrypt ($cookie_value), $cookie_expire, '/', null, true, true); } header("lokasi: index.php"); keluar(); } }</pre> <p>PS:我知道这是重复的,但上面的问题都没有解决我的问题。</p> <p>我再次提到,我尝试在 htaccess 和 php.ini 中设置这些行,但没有成功:</p> <pre class="brush:php;toolbar:false;">php_value session.cookie_lifetime 2629800; php_value session.gc_maxlifetime 2629800; //Dalam functions.php $expire = 60*60*24*30; // Kami memilih tempoh satu tahun ini_set('session.gc_maxlifetime', $expire); session_start();</pre> <p>还值得一提的是,通过在关闭浏览器并重新打开浏览器时建立代码行。但最多只能持续 2 小时。</p>
P粉826429907P粉826429907468 hari yang lalu482

membalas semua(1)saya akan balas

  • P粉549986089

    P粉5499860892023-09-04 00:49:29

    TL;DR setcookie 生命周期与 $_SESSION 的默认 PHPSESSID kekeliruan kitaran hayat kuki>.

    Contoh aliran kerja untuk dibuat $_SESSION 遵守所需的生命周期,必须更新其 PHPSESSID cookie,将 cookie_lifetime 从默认值更改为一个月。这涉及手动管理 $_SESSION。以下是手动管理 $_SESSION:

    1. Tetapkan nama_sesi. (Nama kuki alternatif kepada PHPSESSID boleh ditetapkan.)
    2. Konfigurasikan pilihan sesi. (Ini boleh termasuk tetapan cookie_lifetime.)
    3. Buat dan/atau tetapkan session_id.
    4. Mulakan sesi . (Langkah ini mengisi $_SESSION berdasarkan session_id.)
    5. Sesi pengesahan. (Semak sama ada parameter pengesahan seperti session_id adalah sah.)
    6. Akses dan ubah suai $_SESSION nilai.
    7. Tutupperbualan. (Sekat $_SESSION daripada perubahan selanjutnya sebelum session_id dihantar kepada pelanggan.)
    Pautan pada

    Asas Pengurusan Sesi ini sepatutnya membantu. Anda juga boleh membaca Pembetulan Sesi PHP/Rampasan.

    Dalam ulasan, RiggsFolly menawarkan nasihat yang patut difikirkan, dan Chris Haas menyiarkan rujukan yang bagus. Penyelesaian seperti rujukan nampaknya mencadangkan untuk menyimpan rentetan rawak sebagai kunci carian pengguna dan rentetan cincang yang lebih panjang untuk pengesahan. Carian dan rentetan pengesahan tidak dicincang akan menggunakan setcookie, manakala nilai lain boleh menggunakan setcookie,而其他值可以使用 $_SESSION.

    balas
    0
  • Batalbalas