ログイン検証のタイムアウト

2462 ワード

この数日、上司は私にタイムアウトログインの検証をさせました.その時、簡単な感じがしました.sessionを使って、それからプロファイルを変更すればいいのではないでしょうか.それからネットで見て、このプロファイルをむやみに変更してはいけないことを知りました.プログラムの実行効率に影響します.それから、他の方法を試してみるしかありません.最初はjs判断を採用して、タイマーを使って、マウスの移動とクリックはすべてイベントをトリガーして、それから問題が来て、ページの上にポップアップ層があるため、ポップアップした後に上の層のタイマーは依然として運行して、clearIntervalを使ってクリアすることができますが、しかし考慮しなければならない問題はとても多くて、最後に私は焦点の問題に説得されました.jsが書いているのを見たいなら、私の話をしてもいいです.そこで私は第2の方法を考え始めました.私はウェブサイトの構造を分析しました.すべての行為は共通のbaseクラスから継承され、登録されたsessionなどの情報がここに存在します.では、行為があるたびにこのクラスの構造方法を経て、私たちはこの方法で2つのsessionを保存することができます.1つ目は行為時間session(「timer」,time()です.時間は現在の時間を取って、それから1つの期限切れの時間session(“sleep”,time()+3600)を定義して、このように第1歩は完成して、行、上のコード
_user = session('user');
		if(!$this->_user){
			echo "";
			echo "top.location.href='/index.php/index/account/login'";
			echo "";
		} else {
			session("timer",time());
			//          
			session("sleep",time()+3600);
		}
	}
}

第2のステップでは、フロントエンドページでajaxを採用し、毎秒現在の時間を取得し、期限切れと差をつけるため、ajaxがアクセスするクラスはbaseから継承できないに違いありません.私はpubクラスを構築し、前の時間を判断し、更新するためのisSleepメソッドを書き込みました.
"true")));
		} else {
			exit(json_encode(array('timeout'=>"false")));
		}
	}
}

それからフロントエンドajaxです.これは簡単です.jqueryを導入すれば使えます.私はjquery+layerを使っています.layerはヒントボックスを美化するために使われています.無視できます.



	setInterval(function(){
		//      
		var sleep;
		//  
		var url = "/index.php/index/pub/isSleep";
		$.get(url,function(e){
			$("#timer_sleep").val('');
			$("#timer_sleep").val(e.timeout);

		},"json")
		sleep = $("#timer_sleep").val();
		//console.log(sleep);
		if(sleep == "true") {
			layer.alert("    ",{'icon':2});
			setTimeout(function(){
				window.top.location.href = "/index.php/index/account/login";
			},800)
		}
	},1000);


皆さんに役に立つことを願っています.