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 小时。
TL;DR
setcookie
生命周期与$_SESSION
的默认PHPSESSID
kekeliruan kitaran hayat kuki>.Contoh aliran kerja untuk dibuat
$_SESSION
遵守所需的生命周期,必须更新其PHPSESSID
cookie,将 cookie_lifetime 从默认值更改为一个月。这涉及手动管理$_SESSION
。以下是手动管理$_SESSION
:$_SESSION
berdasarkan session_id.)$_SESSION
nilai.$_SESSION
daripada perubahan selanjutnya sebelum session_id dihantar kepada pelanggan.)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 menggunakan
setcookie
, manakala nilai lain boleh menggunakansetcookie
,而其他值可以使用$_SESSION
.