복붙노트

PHP 세션 제한 시간

PHP

PHP 세션 제한 시간

사용자가 다음과 같이 로그인 할 때 세션을 만들고 있습니다.

$_SESSION['id'] = $id;

X 분의 해당 세션에서 시간 제한을 지정한 다음 X 분에 도달하면 함수 또는 페이지 리디렉션을 수행하는 방법은 무엇입니까 ??

편집 : 비 활동으로 인해 세션이 필요하다고 언급하는 것을 잊었습니다.

해결법

  1. ==============================

    1.먼저 사용자가 마지막으로 요청한 시간을 저장합니다.

    먼저 사용자가 마지막으로 요청한 시간을 저장합니다.

    <?php
      $_SESSION['timeout'] = time();
    ?>
    

    후속 요청에서 이전에 요청한 시간 (이 예에서는 10 분)을 확인하십시오.

    <?php
      if ($_SESSION['timeout'] + 10 * 60 < time()) {
         // session timed out
      } else {
         // session ok
      }
    ?>
    
  2. ==============================

    2.세션이 만료되면 데이터가 더 이상 존재하지 않으므로

    세션이 만료되면 데이터가 더 이상 존재하지 않으므로

    if (!isset($_SESSION['id'])) {
        header("Location: destination.php");
        exit;
    }
    

    세션이 더 이상 활성화되지 않을 때마다 리디렉션됩니다.

    session.cookie_lifetime을 사용하여 세션 쿠키의 수명을 설정할 수 있습니다

    ini_set("session.cookie_lifetime","3600"); //an hour
    

    수정 : 보안 문제 (편의성 대신)로 인해 세션 시간을 초과하는 경우 허용 된 대답을 사용하십시오. 아래 주석이 보여 주듯이 이는 클라이언트가 제어하므로 안전하지 않습니다. 나는 이것을 보안 수단으로 생각하지 않았다.

  3. ==============================

    3.세션이 아직 생성되지 않았 으면 먼저 확인하고 생성하지 않으면 세션을 확인하십시오. 여기서는 1 분 동안 만 설정합니다.

    세션이 아직 생성되지 않았 으면 먼저 확인하고 생성하지 않으면 세션을 확인하십시오. 여기서는 1 분 동안 만 설정합니다.

    <?php 
       if(!isset($_SESSION["timeout"])){
         $_SESSION['timeout'] = time();
       };
       $st = $_SESSION['timeout'] + 60; //session time is 1 minute
    ?>
    
    <?php 
      if(time() < $st){
        echo 'Session will last 1 minute';
      }
    ?>
    
  4. ==============================

    4.

    <script type="text/javascript">
    window.setTimeout("location=('timeout_session.htm');",900000);
    </script>
    

    사이트 테스트 중에는 모든 페이지의 헤더에 나와 있습니다 (아직 사이트가 제작되지 않았습니다). 끝내기 위해 떨어지는 HTML 페이지는 세션을 끝내고 사용자에게 다시 로그인 할 필요성을 알립니다. 이것은 PHP 로직을 사용하는 것보다 쉬운 방법입니다. 아이디어에 대한 몇 가지 의견을 듣고 싶습니다. 내가 본 어떤 함정도 그것에서 보지 못했습니까?

  5. ==============================

    5.

    <?php 
    session_start();
    
    if (time()<$_SESSION['time']+10){
    $_SESSION['time'] = time();
    echo "welcome old user";
    }
    
    else{
    session_destroy();
    session_start();
    $_SESSION['time'] = time();
    echo "welcome new user";
    }
    ?>
    
  6. ==============================

    6.Byterbit 솔루션은 다음과 같은 이유로 문제가됩니다.

    Byterbit 솔루션은 다음과 같은 이유로 문제가됩니다.

    쿠키의 경우 session.cookie_lifetime을 통해 만료를 설정하면 현명한 해결책이 될 수 있습니다. 세션을 만료하려면 session.gc_maxlifetime을 사용할 수 있습니다.

    session_destroy를 호출하여 쿠키를 만료하면 이미 만료되었을 수 있으므로 예기치 않은 결과가 발생할 수 있습니다.

    php.ini에서 변경 작업을하는 것도 유효한 해결책이지만 전체 도메인에 대해 만료를 글로벌하게 만듭니다. 일부 페이지는 다른 쿠키보다 더 많은 쿠키를 유지할 수도 있습니다.

  7. ==============================

    7.

        session_cache_expire( 20 );
        session_start(); // NEVER FORGET TO START THE SESSION!!!
        $inactive = 1200; //20 minutes *60
        if(isset($_SESSION['start']) ) {
    $session_life = time() - $_SESSION['start'];
    if($session_life > $inactive){
        header("Location: user_logout.php");
    }
        }
        $_SESSION['start'] = time();
    
        if($_SESSION['valid_user'] != true){
        header('Location: ../....php');
        }else{  
    

    출처 : http://www.daniweb.com/web-development/php/threads/124500

  8. ==============================

    8.

    <?php
    session_start();
    if($_SESSION['login'] != 'ok')
        header('location: /dashboard.php?login=0');
    
    if(isset($_SESSION['last-activity']) && time() - $_SESSION['last-activity'] > 600) {
        // session inactive more than 10 min
        header('location: /logout.php?timeout=1');
    }
    
    $_SESSION['last-activity'] = time(); // update last activity time stamp
    
    if(time() - $_SESSION['created'] > 600) {
        // session started more than 10 min ago
        session_regenerate_id(true); // change session id and invalidate old session
        $_SESSION['created'] = time(); // update creation time
    }
    ?>
    
  9. from https://stackoverflow.com/questions/3068744/php-session-timeout by cc-by-sa and MIT license