2016-10-30 13 views
0

残念なことに、私は遭遇してセッションを発行しました。残念ながら、私が見つけたソリューションがセキュリティ上の問題またはリスクになるかどうかはわかりません。PHPセッションの明確化

私は、アプリケーションにログインしているローカルホストのPHPプロジェクトに取り掛かりました。私は5,10、15分も離れて戻ってきて、ログインしているアプリケーションを進めることができました。オンラインでテストしてください。私がログインした場合、2〜3分で更新して、再度ログインする必要があります。

ここでは約50件の記事すべてを試しましたが結果はありませんでした。だから私は自分のlocalhostと私のホスト上のphpinfoのすべての行を比較することにしました。私は実際に詳細を見た。

今朝コーヒーに少しの髪が残った。問題を見つけた。

session.cache_expire 180

は今、これは関係なく、セッションの有効期間の3分で終了します。 もローカルホスト上で、

はsession.gc_divisor 1000年

はsession.gc_divisorは今、私はsessions.phpと呼ばれるファイルを持っているその100、

ローカルホスト上ではなく、私のWebホスト上で1000それは私のsession_startです。私が見つけた解決策はここにありました。 http://php.net/manual/en/function.session-cache-expire.php

私はセッションファイルを次のように変更しました。

session_cache_limiter('private'); 
$cache_limiter = session_cache_limiter(); 

session_cache_expire(30); 
$cache_expire = session_cache_expire(); 
session_start(); 
ob_start(); 

結果は、私が3分以上のオープン私のブラウザを離れるとき、それはもはや..再度ログインする私を必要としますが、これは適切な解決策ではありませんか?

答えて

0

session.cache_expireは、PHPセッションの存続期間とは何の関係もないことに注意してください。それはHTTPキャッシュと関係があります。 Webサーバーの前にコンテンツをキャッシュするプロキシがありますか?それが設定コントロールです。ここではPHPのセッションの有効期間の面では

あなたのキー設定は、次のとおりです。

session.gc_maxlifetime - セッションは、「ごみ」としてマークされるまでの秒数。セッションクッキーの有効期限が切れるまでの秒数 - これは、サーバー

session.cookie_lifetimeによって強制されます。これはクライアント(ウェブブラウザ)によって実施されます

あなたはお互いを褒めていることを確認する必要があります。サーバー側がクライアント側より前に期限切れになっている場合、クライアントはセッションCookieを提示し、サーバーはそれを拒否します。クライアント側のCookieがサーバー側より前に期限切れになると、ブラウザーはセッションCookieをまったく送信せず、サーバーは新しいクライアントであると考えて新しいCookieを送信します。

ガベージコレクション自体は、サーバーによって「ガベージ」とマークされたセッションでのみ有効になるため、セッションの有効期間には影響しません。

session.gc_probability

はsession.gc_divisor

これらを考えるための最も簡単な方法は、分数の通りです:二つの重要な設定があります。たとえば、次のように

session.gc_probability = 1

はsession.gc_divisor = 100

クライアント要求は、ガベージコレクタをトリガすること1 100でチャンスがあるでしょう。したがって、100人に1人のクライアントは、パフォーマンスの低下はほとんどありません(それほど速くはありません)。数多くのトラフィックを処理しているため、プロダクションサーバーで1000に設定されている可能性があります。つまり、1分間に1000回のリクエストがあった場合、1分に1回だけガレージコレクタを呼び出すことができます。

+0

@sgifアプリにログインして3分間そのページに座ってから、ログインする必要があるページに移動してから、もう一度ログインするように求められます。上記の次のコードを使用しない限り。 – Case

+0

session.cache_expireはセッションの寿命とは関係ありませんが、3分後にログインする必要があります。 – Case

+0

あなたは実際にページのキャッシュされたバージョンを表示しているという点で、誤って別の問題を発見したことがあります。私はチェックし、キャッシュされたページを表示していないことを確認します。 3分間隔で内容を変更し、ページを再読み込みしてテストします。コンテンツが更新されない場合は、実際のページではなくキャッシュを表示していることがわかります。 –