Bagaimana untuk memastikan sesi pengguna aktif walaupun selepas menutup penyemak imbas atau kembali selepas melahu dalam PHP untuk seketika?
P粉826429907
P粉826429907 2023-09-03 08:53:53
0
1
485
<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粉826429907
P粉826429907

membalas semua(1)
P粉549986089

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.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan