остановить Chrome от восстановления сеанса - PullRequest
0 голосов
/ 21 апреля 2020

Есть ли способ сказать chrome НЕ восстанавливать сеанс при повторном открытии закрытой страницы? Может быть, специальный заголовок?

Когда мои сотрудники входят в приложение моей компании, оно очень зависит от состояния. Если они неактивны в течение 60 минут, я хочу выйти из системы и удалить все данные, относящиеся к тому, что они делали, но проблема в том, что у Chome есть эта удобная функция, которая позволяет заново открывать вашу страницу там, где вы остановились, и не задавать вопросов. вещь. Мой веб-сайт не будет знать, что у них браузер был закрыт в течение двух дней, и setTimeout не будет срабатывать еще 50 минут.

У меня есть еще несколько дурацких обходных путей, но я бы предпочел, если бы я мог просто скажите Chrome, чтобы он не пытался спасти старые сессии, а вместо этого рассматривал каждое открытие так, как будто оно было открыто впервые. возможно отключить кэширование через javascript?

Редактировать: я использую IIS для обслуживания Angular 9 stati c html и javascript.

Ответы [ 2 ]

1 голос
/ 22 апреля 2020

Итак, как вы упомянули, вы используете веб-сайт stati c без серверной части. Хотя вы ничего не упомянули, я предполагаю, что вы используете sessionStorage или localStorage для обработки аутентификации. В этом случае вы можете установить таймер всякий раз, когда пользователь входит в систему, и поддерживать localStorage для отслеживания времени простоя.

let obj_date = new Date();
let miliseconds = obj_date.getTime(); // Returns the number of miliseconds since 1970/01/01
localStorage.setItem("idle_time",miliseconds); 

После этого продолжайте вызывать следующую функцию из чего-либо например, setInterval() каждые 10, 20, 30 или 60 секунд (по вашему выбору), чтобы проверить, истек ли этот срок.

function check_if_session_expired() {
  let max_idle_minutes=60;
  let miliseconds_now = obj_date.getTime();
  let get_idle_time_in_miliseconds = localStorage.getItem("idle_time");
  let one_minute_to_milisecond = 1000 * 60;
  if ((Math.round(miliseconds_now / one_minute_to_milisecond) - Math.round(get_idle_time_in_miliseconds / one_minute_to_milisecond)) >= max_idle_minutes) {

    console.log("expired");
    //logout the user and clear sessionStorage/localStorage if you want
  } else {
    localStorage.setItem("idle_time",miliseconds_now);
  }
}

Вы можете использовать куки для того же самого.

0 голосов
/ 21 апреля 2020

Что вы хотите сделать, это уничтожить session со стороны сервера. Проверьте код ниже, который написан в php. Однако, если у вас есть идея, вы можете использовать что угодно для ее реализации.

<?php

session_start();

//Expire the session if user is inactive for 60 minutes or more.
$expireAfter = 60;

//Assign the current timestamp as the user's latest activity
$_SESSION['last_action'] = time();

//Check to see if our "last action" session variable has been set.
if(isset($_SESSION['last_action'])){

    //Figure out how many seconds have passed since the user was last active.
    $secondsInactive = time() - $_SESSION['last_action'];

    //Convert our minutes into seconds.
    $expireAfterSeconds = $expireAfter * 60;

    //Check to see if they have been inactive for too long.
    if($secondsInactive >= $expireAfterSeconds){
        //User has been inactive for too long. Kill their session.
        session_destroy();
        unset($_SESSION);
        header("Location: http://".$_SERVER['SERVER_NAME'].":".$_SERVER['SERVER_PORT']."/example/login.php");
        exit;
    }

}

Это просто простая реализация, и вы, безусловно, можете расширить ее, чтобы она работала так, как вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...