ユーザーが次のようにログインすると、セッションが作成されます。
$_SESSION['id'] = $id;
X分のセッションでタイムアウトを指定し、X分に達したら機能またはページリダイレクトを実行するにはどうすればよいですか?
編集:私はセッションが非アクティブのためにタイムアウトする必要があることを言及するのを忘れていました。
最初に、ユーザーが最後にリクエストを行った時間を保存します
<?php
$_SESSION['timeout'] = time();
?>
後続のリクエストで、以前のリクエストを行った時間を確認します(この例では10分)
<?php
if ($_SESSION['timeout'] + 10 * 60 < time()) {
// session timed out
} else {
// session ok
}
?>
セッションの有効期限が切れると、データは存在しなくなるため、次のようになります
if (!isset($_SESSION['id'])) {
header("Location: destination.php");
exit;
}
セッションがアクティブでなくなるたびにリダイレクトします。
session.cookie_lifetime を使用して、セッションCookieの有効期間を設定できます。
ini_set("session.cookie_lifetime","3600"); //an hour
編集:セキュリティの問題のために(利便性の代わりに)セッションをタイムアウトする場合、以下のコメントが示すように、受け入れられた回答を使用してください。これはクライアントによって制御され、安全ではありません。これをセキュリティ対策とは考えていませんでした。
最初にセッションがまだ作成されていないことを確認し、作成されていない場合は作成します。ここでは、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';
}
?>
<script type="text/javascript">
window.setTimeout("location=('timeout_session.htm');",900000);
</script>
すべてのページのヘッダーで、サイトのテスト中に私のために働いています(サイトはまだ運用されていません)。該当するHTMLページがセッションを終了し、ユーザーに再度ログインする必要があることを通知します。これは、PHPロジックで遊ぶよりも簡単な方法のようです。このアイデアについてコメントをお願いします。私が見たことがないトラップはありますか?
<?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";
}
?>
Byterbitソリューションには問題があります:
cookieの場合、session.cookie_lifetimeを使用して有効期限を設定することは、設計上およびセキュリティ上適切なソリューションです。セッションを期限切れにするには、session.gc_maxlifetimeを使用できます。
session_destroyを呼び出してCookieを期限切れにすると、すでに期限切れになっている可能性があるため、予測できない結果が生じる可能性があります。
php.iniに変更を加えることも有効な解決策ですが、ドメイン全体の有効期限をグローバルに設定しますが、これは実際に必要なものではない可能性があります。
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/1245
<?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
}
?>