Zaman belli bir miktar sonra çıkıyor

3 Cevap php

Ne iyi yolu hareketsizlik X saniye sonra (yani temelde sadece bir yönlendirme yapmak) bir PHP uygulama bir kullanıcı çıkış olurdu? "Hareketsizlik" için ben son sayfa yük zamanı saymak ve şimdiki zaman uzak X saniye daha fazla ise, yönlendirmeyi gerçekleştirmek istiyorum.

Bu JavaScript ile elde edilmesi gereken bir şey mi?

3 Cevap

Sadece yanıtladı this question dün ... OP zaman belirli bir süre sonra sormak istedim, o kullanıcı oturum açmış veya değil kalmak istiyorum.

Bir ovanın herhangi onayı olmadan yönlendirmek için, basit bir setTimeout çağrısı kullanabilirsiniz:

var minutes = 30;
setTimeout(function(){location.href = 'logout.php';}, minutes*60*1000);

Eğer gerçekten bir nedenle bir yönlendirme istiyor musunuz?

Genellikle her kullanıcı oturumu ilişkili bir zaman damgası vardır. Daha sonra oturumu kullanıcı için ermemiĢse emin olun, ya da aslında, sadece emin oturumları geçerli yapıyoruz Yani oturum isteyin.

Eğer bir çıkış sayfasında birine yönlendirme, gerçekten hiçbir şey elde edilmez. Ayrıca oturumu, sunucu tarafı zaman aşımına uğradı değil emin olmak gerekir. Bir çıkış sayfasına yönlendirmeler dahil, istemci tarafında herhangi bir şey, güvenilmez ve atlatılabilir.

PHP basit şekli:

<?php 

session_start();

$session_lifetime = 60*60; // 1 hour

if (!isset($_SESSION['time']) || !$_SESSION['time']) {
$_SESSION['time'] = time();
}

if (time() - $_SESSION['time'] > $session_lifetime) {
// session has expired
$_SESSION['user'] = null;
$_SESSION['time'] = null;
} else {
// keep session alive
$_SESSION['time'] = time();
}

Ne kullanıcı sayfasındaki forma yazmaya başlar ve zaman aşımı süresi bitmiş değil ise? Ben şimdiye kadar diğer yanıtlar açıklanan daha başka bir şekilde hareketsizlik anlaştım.

var rowLockSeconds = 0;

function startRowLockTimer()
{
   setInterval("incrementRowLockTimer()",60000);
   $("input").keypress(function (e) { rowLockSeconds=0; }).click( function() { rowLockSeconds=0;  });
   $("textarea").keypress(function (e) { rowLockSeconds=0; }).click( function() { rowLockSeconds=0; ; });

   window.onbeforeunload = function obul() { if (hasChanged) { return 'You will lose any unsaved changes you\'ve made.'; } }
   window.onunload = clearRowLock;
}

Onlar giriş yaptığınız gibi Yani, satır kilidi sayacı 0'dan başlar. Her 60 saniyede o zaman aşımına görmek için aralık işlevini çağırır.

function incrementRowLockTimer()
{
rowLockSeconds = rowLockSeconds+60;

// 10 minute timer to clear someone out of a page if there has been no activity
if (rowLockSeconds >= 600)
{
	window.onbeforeunload=null;
	// clear rowLock with request here
	$.get('../ajax/rowLock-server.php?do=delete&rowLockID='+currentRowLockID+'&userUUID='+currentUserUUID, function() { 
		alert('You have been logged out of this page after 10 minutes of inactivity.');
		document.location.href='../main.php';
	});
}
}

AJAX DB satır kilidi açık dışarı denetler.

Anahtar giriş ve textarea bağları böylece forma kullanıcı türleri eğer bir şey, zaman aşımı sıfırlanır ve onlar başka bir 10 dakika var.