即使在關閉瀏覽器或在 PHP 中閒置一段時間後返回後,如何保持使用者會話處於活動狀態?
<p>在我的程式碼中,我可以選擇“記住我”,選取後會將電子郵件和密碼的值保存在cookie 中,並且cookie 持續1 個月,現在,當使用者再次進入頁面時,會話它不是保持活動狀態,而是從儲存的cookie 中取得值並將其顯示在登入表單上。
我目前正在使用 cloudflare 和託管,我已經嘗試建立這些程式碼行:</p>
<pre class="brush:php;toolbar:false;">php_value session.cookie_lifetime 2629800;
php_value session.gc_maxlifetime 2629800;</pre>
<p>都在 php.ini 和 .htacces 中,但結果是相同的(當使用者關閉瀏覽器時,會話將關閉)。 </p>
<p>這是loginUser 函數,它處理登入並在使用者選取“記住我”時建立cookie,我想要的是,透過選取“提醒我”,即使使用者關閉瀏覽器或在一段時間後返回,會話仍保持活動狀態不活動時間,但會話持續時間為1 個月(2629800 秒)。 </p>
<pre class="brush:php;toolbar:false;">function loginUser($email, $password, $rememberme)
{
$mysqli = connect();
$email = trim($email);
$password = trim($password);
if ($email == "" || $password == "") {
return 'Both fields are required';
}
$email = filter_var($email, FILTER_SANITIZE_EMAIL);
$password = filter_var($password, FILTER_SANITIZE_SPECIAL_CHARS);
$sql = "SELECT * FROM users WHERE email = ? LIMIT 1";
$stmt = $mysqli->prepare($sql);
$stmt->bind_param("s", $email);
$stmt->execute();
$result = $stmt->get_result();
$data = $result->fetch_assoc();
if ($data == NULL) {
return 'The email does not exist, sign up to enter';
}
if (password_verify($password, $data["password"]) == FALSE) {
return 'The password is incorrect, please check and try again';
} else {
$user_id = $data['user_id'];
$_SESSION['auth_user_id'] = $user_id;
$_SESSION["user"] = $email;
$_SESSION["pass"] = $password;
$_SESSION["username"] = $data['username'];
$_SESSION["verify"] = $data['verify'];
$_SESSION["profile"] = $data['profileImage'];
$_SESSION["id"] = $data['user_id'];
$_SESSION["vip"] = $data['vip'];
setcookie('user_id', $data['user_id'], time() 60 * 60 * 24 * 30, '/');
if ($rememberme) {
$cookie_name = 'Remember_US';
$cookie_value = json_encode(array('lemail' => $email, 'lpassword' => $password));
$cookie_expire = time() (60 * 60 * 24 * 30);
setcookie($cookie_name, encrypt($cookie_value), $cookie_expire, '/', null, true, true);
}
header("location: index.php");
exit();
}
}</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;
//In functions.php
$expire = 60*60*24*30; // We choose a one year duration
ini_set('session.gc_maxlifetime', $expire);
session_start();</pre>
<p>也值得一提的是,透過在關閉瀏覽器並重新開啟瀏覽器時建立程式碼行,會話保持活動狀態,但最多只能持續 2 小時。 </p>