一般的な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()を持っている必要があり、オープンセッション
この時点で、セッションの実現には、事前に破壊されたが、需要の時間に、完全に破壊されません。この上で、前方独自のビューを置くためにようこそ、我々は、更新していきます。