Я пытаюсь создать систему, в которой, когда пользователь неактивен в течение x времени, они должны быть выведены из системы и отправлены обратно в 'index.php'. Я использую код, который я нашел здесь - http://cookbooks.adobe.com/post_Set_a_time_limit_on_a_login_session__PHP_-16701.html и я положил его в функцию, как это:система неактивности и входа php
phpfunc/inactivity.php
<?php
function inactivity() {
// create a session
if (!isset($_SESSION)) {
session_start();
}
// store the current time
$now = time();
// get the time the session should have expired
$limit = $now - 60*20;
// check the time of the last activity
if (isset ($_SESSION['last_activity']) && $_SESSION['last_activity'] < $limit) {
// if too old, clear the session array and redirect
$_SESSION = array();
header('../index.php');
exit;
}
else {
// otherwise, set the value to the current time
$_SESSION['last_activity'] = $now;
}
}
?>
Затем я вызываю функцию, как это ... в верхней моей защищенной странице
шаблоны/login_success.php:
<?php
require('/Users/Eamon/Sites/phpfunc/inactivity.php');
inactivity();
if($_SESSION['username'] === null){
header("location: ../index.php");
}
?>
<h1>Login Successful</h1>
<h2>Username: <? echo $_SESSION['username']?></h2>
<div id="logoutlinkdiv" >
<a href = "#" >Log out</a>
</div>
Я могу войти - и все пассивность вещи, кажется, работает. Я протестировал его, добавив несколько инструкций эха здесь и там ... и после входа в систему я попытался перейти на защищенную страницу - вроде этого «localhost/~ Eamon/templates/login_success.php», и это позволяет мне видеть это ... после 20 минут мне нужно снова войти в систему. Тем не менее, у меня есть страница, которая загружается после выхода пользователя из системы (после нажатия ссылки «logoutlinkdiv») - и у нее есть ссылка на нее для входа в систему снова. Когда я нажимаю на эту ссылку, я получаю сообщение «Неправильное имя пользователя или пароль», которое можно найти в следующем файле (который запускается при входе в систему). Через 20 минут я могу снова войти в систему, не получив эту ошибку.
checklogin.php
<?php
session_start();
$host="localhost"; // Host name
$username="root"; // Mysql username
$password="bonjour3"; // Mysql password
$db_name="itit"; // Database name
$tbl_name="members"; // Table name
// Connect to server and select databse.
$mysqli = new mysqli("$host", "$username", "$password", "$db_name")or die("cannot connect");
// Define $myusername and $mypassword
$myusername=$_POST['myusername'];
$mypassword=$_POST['mypassword'];
$sql = $mysqli->prepare("SELECT * FROM $tbl_name WHERE username=? and password=?");
$sql->bind_param('ss',$myusername,$mypassword);
$sql->execute();
$sql->store_result();//apply to prepare statement
$numRows = $sql->num_rows;
if($numRows === 1){
$_SESSION['username'] = $myusername;
}
else {
echo "Wrong Username or Password";
session_destroy();
}
?>
Вот вышеупомянутая страница выхода из системы (где пользователь может войти в систему снова ... страницу неприятности!):
шаблоны/logout.php
<?php
session_start();
session_destroy();
?>
<div id="loginlinkdiv" >
<h2>You have been logged out.</h2>
<a href = "#">Log in</a>
</div>
В случае, если это релевантно ... вот jquery, который я использую. Я, сделав SPA - так JQuery загружается и опорожнение вещи для меня в "главном" DIV на index.php - здесь:
index.php
<?php session_start(); ?>
<!DOCTYPE html>
<html>
<head>
<title>it IT</title>
<script src="reqscripts/jquery.js" type="text/javascript"></script>
<script src="js/application.js" type="text/javascript"></script>
</head>
<body>
<div id="main"></div>
</body>
</html>
UPDATE
После предложение - я попробовал первый ответ на этой странице:
How do I expire a PHP session after 30 minutes?
я изменил два файла.
phpfunc/inactivity.php теперь выглядит следующим образом:
<?php
function inactivity() {
if (isset($_SESSION['LAST_ACTIVITY']) && (time() - $_SESSION['LAST_ACTIVITY'] > 1800)) {
// last request was more than 30 minutes ago
session_unset(); // unset $_SESSION variable for the run-time
session_destroy(); // destroy session data in storage
header("/Users/Eamon/Sites/index.php");
}
$_SESSION['LAST_ACTIVITY'] = time(); // update last activity time stamp
}
?>
и шаблоны/login_success.php выглядит следующим образом:
<?php
require('/Users/Eamon/Sites/phpfunc/inactivity.php');
session_start();
inactivity();
?>
<h1>Login Successful</h1>
<h2>Username: <? echo $_SESSION['username']?></h2>
<div id="logoutlinkdiv" >
<a href = "#" >Log out</a>
</div>
Все та же проблема, как представляется, происходит ... и Думаю, я поймал новый сбой. Когда я нажимаю ссылку для входа (templates/logout.php), она приводит меня к index.php. Я пытаюсь войти в систему, но информация в текстовых окнах перезагружается, и, похоже, ничего не происходит. Когда я снова попробую - снова получаю «Неправильное имя пользователя или пароль». Также - <? echo $_SESSION['username']?>
больше не отображается на странице login_success.php.
UPDATE
Кажется, как будто я не получаю, потому что подписал в <? echo $_SESSION['username']?>
еще не делает ничего на выходе.
Почему наклоняю вы просто установить его в php.ini или HTAccess: http://www.php.net/manual/en/session.configuration.php#ini.session. gc-maxlifetime (директива 'session.gc-maxlifetime')? Намного проще! – jtheman
Возможный дубликат http://stackoverflow.com/questions/520237/how-do-i-expire-a-php-session-after-30-minutes –
@jtheman благодарит за то, что указал мне в правильном направлении - только то, что я необходимо. – ewizard