質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

5回答

4287閲覧

php 自動ログアウトについて

beginner_39

総合スコア77

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

1グッド

3クリップ

投稿2017/09/14 07:42

###自動セッションログアウトについてご質問です

管理画面にて、一定の操作等が行われなかった際、
自動的にログアウトさせる方法を教えていただきたいです。

現在、
ログイン画面
ログイン後のページ2〜3ページ作成
はしているのですが、
一定の操作を行わなかった際、ログアウトになりません。
色々調べてはいますが、
php初心者で関数に関する意味がいまいち理解に苦しんでおります。

ログイン画面もしくはログイン後のページに
「一定の操作が行わなかった場合」の
php分岐を記載しないと自動ログアウトは実行されないのでしょうか?

よろしくお願いいたします。

退会済みユーザー👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答5

0

ベストアンサー

phpの一番最初に

php

1ini_set( 'session.gc_maxlifetime', 60 ); // 秒(デフォルト:1440)

と設定したらセッションがデストロイされるまでの時間が変更できますので、これで対応してください。

p.s.
セッションのログアウトについて
実際に組み込むならこんな感じ?

php

1 2function __construct(){ 3 session_start(); 4 5 // セッションのライフタイム変更 6 ini_set( 'session.gc_maxlifetime', 60 ); // 秒(デフォルト:1440) 7 8 // セッションが存在していない(タイムアウトもしくはログアウトされている) 9 if(!isset($_SESSION['LOGIN_INFO'])) { 10 // ここにログイン処理を書く(ログイン画面に遷移させる) 11 12 // セッションが存在している場合はセッションのライフタイムを更新 13 } else { 14 unset($_SESSION['LOGIN_INFO']); 15 $_SESSION['LOGIN_INFO'] = true; 16 } 17} 18 19// ここからはこのページの処理 20

__constructはページ読み込み時に自動的に読み込まれるメソッドです

session_start()はセッションを起動するもので

ini_set( 'session.gc_maxlifetime', 60 );
でセッションの持続時間を変更出来るので一定時間ページ遷移されない場合はセッションがなくなってしまいます。

isset関数は中身がnull以外ならtrueが返ってきます。

unset関数は対象の変数の中身をnullにします。

要は何をやってるのか、なんですが

ログインしたときに$_SESSION['LOGIN_INFO'] = trueを宣言しておけば
ログイン証明のセッションが発行されるので、
それがあるかないかを判定して再度ログイン要求をかけるか判定させようとしています。

また、セッションの持続時間も変更してあるので、セッションが切れたらもちろんログイン証明がなくなるので再度ログイン要求させます。

一定時間操作が無ければ、ということだったので、別のページに遷移した際にログイン証明セッションを再発行してあげれば同様の動きになると思います。

投稿2017/09/14 07:50

編集2017/09/14 08:07
Kazuma2015

総合スコア46

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

beginner_39

2017/09/16 00:47

kazuma2015様 ご返信いただき、誠にありがとうございます。 またご丁寧に説明文付きで理解しやすいです。 ※一部の説明につきましては、勉強中。。。 一度、試させていただきたいと思います。 そうするとkazuma2015様のご説明がより理解できるかと思います。 ありがとうございます。
guest

0

「自動ログアウト」をどのタイミングに行うかにもよると思います。
私の場合は、下記のように構築しています。

  1. 最終アクセス時間をセッションに保持
  2. 画面にアクセスする毎にセッションが切れていないか確認する
  3. 切れていればログイン画面へリダイレクト、切れていなかったら次のチェック
  4. セッションに保持した「最終アクセス時間」と「現在時間」を比べる
  5. 比べた結果、一定時間(定数とか設定ファイルで持っておく)を過ぎていたら、セッションを破棄してログイン画面へ
  6. 過ぎていなければセッションの最終アクセス時間を更新してアクセスした画面を表示

もし、画面アクセスなしに・・・となったらjavascriptのsetintervalでajaxにて上記チェックを行い、
一定時間経過していた場合にjavascriptでアラートを出しjavascriptでログイン画面に遷移させます。

投稿2017/09/14 07:50

編集2017/09/14 07:52
m.ts10806

総合スコア80765

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

beginner_39

2017/09/14 07:58

mts10806様 貴重なご回答誠に有難うございます。 大変失礼なご返信となりますが、 mts様の場合は1〜6の工程全てでセッション確認をしているのでしょうか?
m.ts10806

2017/09/14 08:21

工程という大それたものではないです。 ざっくり書くとこんな感じ if($_SESSIONが参照できるか){ if($_SESSION最終アクセス時間が参照できるか){ if((現在時刻と最終アクセス時間の差) > 一定時間){ セッション破棄 ログイン画面へリダイレクト }else{ $_SESSION最終アクセス時間を現在時刻に更新 } }else{ セッション破棄 ログイン画面へリダイレクト } }else{ ログイン画面へリダイレクト } ~画面表示~
beginner_39

2017/09/16 00:42

mts10806様 ご回答いただき、誠にありがとうございます。 ご回答いただいた記述を参考にさせていただきながら、 構築していきたいと思います。 ありがとうございます。
guest

0

Javascript で session の保持期間を操作する手法があるようです。
[PHP] sessionのタイムアウトをサーバー設定ではなく、プログラム設定で変更する方法

投稿2017/09/14 07:47

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

beginner_39

2017/09/14 07:56

te2ji様 貴重なご回答誠に有難うございます。 urlを参照し、勉強させていただきます。
退会済みユーザー

退会済みユーザー

2017/09/14 08:00

こんなに短時間に大量の回答がつく質問だったことにびっくりですw 色々やり方あるんですね。 勉強になりました。
guest

0

セッションの期限をきめておいて、setTimeoutでその期限以上たったタイミングで
そのページを再読込すれば、セッション切れとなるのでそれをキーに
ログイン画面にとばせばよいでしょう

投稿2017/09/14 07:46

yambejp

総合スコア114585

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

beginner_39

2017/09/14 07:54

yamdejp様 貴重なご回答誠に有難うございます。
guest

0

php.iniにて
session.cookie_lifetime
の値を設定すれば、設定した時間でクッキーのセッションが削除されるので
再ログインが必要になります。

投稿2017/09/14 07:44

Clor

総合スコア883

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

beginner_39

2017/09/14 07:46

Clor様 貴重なご回答、誠に有難うございます。 php.iniファイルは作成していないのですが、 作成する必要があるのでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問