[0006・セッション]セッションが事前に破壊されていないことを確認する方法が、時間と徹底的な破壊

一般的な2つの大きな問題を使用してセッション:

  1. 使用すると、突然のセッションは、期限が切れて空であります
  2. 完全にセッションオフ書きたい、時には必ずしもすぐにオフに書かれていません

これら二つの問題を解決するために、これはに基づいて、効果的な方法、すなわちを与える溶液(変性および人工のphp.iniの$ _SESSION [「last_time」]を点検)。

最初のステップは、php.iniのsession.gc_maxlifetime、はsession.gc_divisor、session.gc_probability値を変更します

session.gc_maxlifetime = 14400 
  • 世代後4時間後、つまり、セッションファイルを生きるためのセッション時間は、GC(ガベージコロケーション)ガベージコレクションを待っている、ジャンクファイルと見なされます。ここでは14400(4時間)に変更し、デフォルト値は1440(24分)、ユーザーの適度な量であるとき、サーバーのパフォーマンスの問題を考えます
session.gc_divisor = 1000 
session.gc_probability = 1 
  • セッションごみリサイクル確率分母、およびガベージコレクションが(にsession_startとして何度も実行する実行するために理解することができる)、第一および1000年1のデフォルト値のままにしてください
  • 注:APPSERVや他のパブリッシングツールを使用している場合は、変更php.iniのは、サービス・ツールを再起動する必要があります

システムを使用してセッションを生成することは$ _SESSIONを生成する、値を必要とする第二工程、[「last_time」]
次のように作業時間は、一度切断10分間他のままです。

	//当前时间
	$hour = date("H");
	//during the morning
	if($hour < 12 && $hour > 6)
	{
		$_SESSION['last_time'] = strtotime("12:00:00");
	//during the afternoon
	}elseif($hour < 18 && $hour > 13){
		$_SESSION['last_time'] = strtotime("18:00:00");
	//other time
	}else{
		$_SESSION['last_time'] = time() + 60 * 10;
	}

次のようにテストコードがあります:

	if(!empty($_SESSION['last_time']))
	{
		if($_SESSION['last_time'] > time())
		{
			//session超时,但未被清空,手工执行清空
			//$_SESSION = array(); //这个大家一直在用,但不确定其是否有意义,之后将更新这里
			session_unset(); //释放内存中的session,但不删除session文件与sessionid
			session_destroy(); //删除session文件与sessionid,但不释放内存中的session
			//执行业务代码
		}else{
			//session在有效期内,执行业务代码
		}
	}else{
		//session超时,且被清空,未以防万一,再次清空一次
		//$_SESSION = array(); //这个大家一直在用,但不确定其是否有意义,之后将更新这里
		session_unset(); //释放内存中的session,但不删除session文件与sessionid
		session_destroy(); //删除session文件与sessionid,但不释放内存中的session
		//执行业务代码
	}
  • 注:このコードは、前にsession_start()を持っている必要があり、オープンセッション

この時点で、セッションの実現には、事前に破壊されたが、需要の時間に、完全に破壊されません。この上で、前方独自のビューを置くためにようこそ、我々は、更新していきます。

おすすめ

転載: blog.csdn.net/HoD_DoH/article/details/92791415