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>