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
372

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:

php_value session.cookie_lifetime 2629800; php_value session.gc_maxlifetime 2629800;

Kedua-duanya berada dalam php.ini dan .htacces, tetapi hasilnya adalah sama (sesi akan ditutup apabila pengguna menutup penyemak imbas).

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).

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(); } }

PS:我知道这是重复的,但上面的问题都没有解决我的问题。

我再次提到,我尝试在 htaccess 和 php.ini 中设置这些行,但没有成功:

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();

还值得一提的是,通过在关闭浏览器并重新打开浏览器时建立代码行。但最多只能持续 2 小时。

P粉826429907
P粉826429907

membalas semua (1)
P粉549986089

TL;DRsetcookie生命周期与$_SESSION的默认PHPSESSIDkekeliruan kitaran hayat kuki>.

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

  1. Tetapkannama_sesi. (Nama kuki alternatif kepada PHPSESSID boleh ditetapkan.)
  2. Konfigurasikan pilihan sesi. (Ini boleh termasuk tetapancookie_lifetime.)
  3. Buatdan/atautetapkansession_id.
  4. Mulakan sesi. (Langkah ini mengisi$_SESSIONberdasarkan session_id.)
  5. Sesi pengesahan. (Semak sama ada parameter pengesahan seperti session_id adalah sah.)
  6. Akses dan ubah suai$_SESSIONnilai.
  7. Tutupperbualan. (Sekat$_SESSIONdaripada perubahan selanjutnya sebelum session_id dihantar kepada pelanggan.)
Pautan pada

Asas Pengurusan Sesiini sepatutnya membantu. Anda juga boleh membacaPembetulan 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 menggunakansetcookie, manakala nilai lain boleh menggunakansetcookie,而其他值可以使用$_SESSION.

    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!