찾다

 >  Q&A  >  본문

브라우저를 닫은 후에도 또는 PHP에서 잠시 유휴 상태로 돌아온 후에도 사용자 세션을 활성 상태로 유지하는 방법은 무엇입니까?

<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>
P粉826429907P粉826429907468일 전480

모든 응답(1)나는 대답할 것이다

  • P粉549986089

    P粉5499860892023-09-04 00:49:29

    TL;DR setcookie 生命周期与 $_SESSION 的默认 PHPSESSID 쿠키 수명주기 혼란>.

    만들기 위한 작업 흐름의 예 $_SESSION 遵守所需的生命周期,必须更新其 PHPSESSID cookie,将 cookie_lifetime 从默认值更改为一个月。这涉及手动管理 $_SESSION。以下是手动管理 $_SESSION:

    1. session_name을 설정합니다. (PHPSESSID에 대한 대체 쿠키 이름을 설정할 수 있습니다.)
    2. 세션 옵션을 구성하세요. (여기에는 cookie_lifetime 설정이 포함될 수 있습니다.)
    3. session_id를 생성 및/또는 설정 합니다.
    4. 세션을 시작하세요. (이 단계는 session_id를 기준으로 $_SESSION 채워집니다.)
    5. 세션을 확인하세요. (session_id 등 인증 파라미터가 유효한지 확인하세요.)
    6. $_SESSION 값에 액세스하고 수정합니다.
    7. 세션을 닫습니다. (session_id가 클라이언트에 전송되기 전에 추가 변경을 차단합니다.) $_SESSION

    Session Management Basics에 대한 이 링크가 도움이 될 것입니다. PHP 세션 수정/하이재킹을 읽어보실 수도 있습니다.

    댓글에서 RiggsFolly는 생각해 볼 만한 조언을 제공했고 Chris Haas는 훌륭한 참고 자료를 게시했습니다. 참조와 같은 솔루션은 임의의 문자열을 사용자 조회 키로 저장하고 확인을 위해 더 긴 해시 문자열을 저장하는 것을 제안하는 것 같습니다. 조회 및 해시되지 않은 유효성 검사 문자열은 setcookie를 사용하고 다른 값은

    를 사용할 수 있습니다. setcookie,而其他值可以使用 $_SESSION

    회신하다
    0
  • 취소회신하다