브라우저를 닫은 후에도 또는 PHP에서 잠시 유휴 상태로 돌아온 후에도 사용자 세션을 활성 상태로 유지하는 방법은 무엇입니까?
P粉826429907
2023-09-03 08:53:53
<p>내 코드에서 "기억하기"를 선택할 수 있습니다. 선택하면 이메일과 비밀번호 값이 쿠키에 저장되고 쿠키는 1개월 동안 지속됩니다. 이제 사용자가 페이지에 다시 들어갈 때 세션을 유지하는 대신 활성화되면 저장된 쿠키에서 값을 가져와 로그인 양식에 표시합니다.
저는 현재 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 함수입니다. 사용자가 "기억하기"를 선택할 때 로그인을 처리하고 쿠키를 생성합니다. 제가 원하는 것은 사용자가 브라우저를 닫거나 나중에 다시 돌아오더라도 "알림"을 선택하는 것입니다. 비활성 시간 동안 세션은 활성 상태로 유지되지만 세션 기간은 1개월(2629800초)입니다.</p>
<pre class="brush:php;toolbar:false;">loginUser($email, $password, $rememberme) 함수
{
$mysqli = 연결();
$email = 트림($email);
$password = 트림($password);
if ($email == "" || $password == "") {
return '두 필드가 모두 필요합니다.';
}
$email = filter_var($email, FILTER_SANITIZE_EMAIL);
$password = filter_var($password, FILTER_SANITIZE_SPECIAL_CHARS);
$sql = "SELECT * FROM 사용자 WHERE email = ? 제한 1'';;
$stmt = $mysqli->prepare($sql);
$stmt->bind_param("s", $email);
$stmt->execute();
$result = $stmt->get_result();
$data = $result->fetch_assoc();
if ($data == NULL) {
return '이메일이 존재하지 않습니다. 가입하려면 입력하세요.';
}
if (password_verify($password, $data["password"]) == FALSE) {
return '비밀번호가 올바르지 않습니다. 확인 후 다시 시도해 주세요.';
} 또 다른 {
$user_id = $data['user_id'];
$_SESSION['auth_user_id'] = $user_id;
$_SESSION["사용자"] = $email;
$_SESSION["pass"] = $password;
$_SESSION["사용자 이름"] = $data['사용자 이름'];
$_SESSION["확인"] = $data['확인'];
$_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 = '기억_미국';
$cookie_value = json_encode(array('lemail' => $email, 'lpassword' => $password));
$cookie_expire = 시간() + (60 * 60 * 24 * 30);
setcookie($cookie_name, encrypt($cookie_value), $cookie_expire, '/', null, true, true);
}
header("위치: index.php");
출구();
}
}</pre>
<p>PS:我没有解决我的问题.</p>
<p>我再次提到,我尝试에서 htaccess와 php.ini 中设置这些行,但没有成功:</p>
<pre class="brush:php;toolbar:false;">php_value session.cookie_lifetime 2629800;
php_value 세션.gc_maxlifetime 2629800;
//functions.php에서
$만료 = 60*60*24*30; // 1년 기간을 선택합니다.
ini_set('session.gc_maxlifetime', $expire);
session_start();</pre>
<p>续 2 小时。</p>
TL;DR
setcookie
生命周期与$_SESSION
的默认PHPSESSID
쿠키 수명주기 혼란>.만들기 위한 작업 흐름의 예
$_SESSION
遵守所需的生命周期,必须更新其PHPSESSID
cookie,将 cookie_lifetime 从默认值更改为一个月。这涉及手动管理$_SESSION
。以下是手动管理$_SESSION
:$_SESSION
채워집니다.)$_SESSION
값에 액세스하고 수정합니다.$_SESSION
Session Management Basics에 대한 이 링크가 도움이 될 것입니다. PHP 세션 수정/하이재킹을 읽어보실 수도 있습니다.
댓글에서 RiggsFolly는 생각해 볼 만한 조언을 제공했고 Chris Haas는 훌륭한 참고 자료를 게시했습니다. 참조와 같은 솔루션은 임의의 문자열을 사용자 조회 키로 저장하고 확인을 위해 더 긴 해시 문자열을 저장하는 것을 제안하는 것 같습니다. 조회 및 해시되지 않은 유효성 검사 문자열은setcookie
를 사용하고 다른 값은를 사용할 수 있습니다.
setcookie
,而其他值可以使用$_SESSION