3

私の問題は、php.iniを変更せずに、php.ini内のデフォルト設定よりもセッションデータの寿命を延ばす必要があることですぐに説明されます。インストールごとにスクリプトを変更する必要がないように、サーバープラットフォーム全体でさまざまな php セットアップに適用できるソリューションを探しています。

サーバーのデフォルトを変更したくないので、スクリプトでできるだけ独立したままにしたいので、ガベージコレクターがセッションデータを時期尚早に破棄するように設定されているデフォルトの 1440 秒を超える方法を探しています。一部のサーバーでは GC が php の設定の影響を受けずに実行され、ここで説明されているように 24 分後にセッションが削除されるため、単純ini_set('session.gc_maxlifetime',36000); に 10 時間に設定しても機能しません。この問題を回避するために、作成者は、session.save_path を OS の gc の影響を受けない別のフォルダーに変更し、それによって設定された session.gc_maxlifetime を設定に適用することを提案しています。残念ながら、php の tmp スペース内に一時フォルダーを作成できませんでした。作成したいのですが、ほとんどのサーバーで 0600 アクセス権がないため、作成できないようです。

解決策の 1 つは、セッション データを共有ホスト フォルダーに作成された自分のフォルダーにリンクすることですが、このフォルダーをオンラインで使用できるようにする必要があるため、ID の盗難にさらされる可能性があるため、安全ではないようです。それが事実かどうかはわかりませんが。

別の解決策は$_SESSION["stayalaive"]=time();、gc が特定の時間だけセッションをログイン スクリプトに削除し、ログイン スクリプトが呼び出されるたびにセッションが延長されるようにすることです。つまり、ユーザーが 24 分間何もクリックしない場合、セッションはとにかく削除されますが、これは私が一緒に暮らすことができるものですが、不要と思われる別のプロセスを実行しているようです.

したがって、私の質問は、パフォーマンスを上げすぎずに、セッション データを 10 時間維持するように設定する方法です。

4

2 に答える 2

3

ホスティング予約スペース内にディレクトリを作成する前に、スクリプト内で php.ini ディレクティブを使用しました。

したがって、(スクリプトの最初の段階で) これは間違いなくうまくいくはずです:

<?php

    // obtain current directory
    $APPPATH = dirname(__FILE__); 

    if ( ! file_exists($APPPATH . '/tmp/sessions'))
    {
        mkdir($APPPATH . '/tmp/sessions', 0700, TRUE);
    }

    ini_set('session.save_path', $APPPATH . '/tmp/sessions');
    ini_set('session.gc_maxlifetime', 36000);
    session_start();

?>

両方のディレクティブには PHP_INI_ALL変更可能なモードがあるため、スクリプト内で設定できます。

于 2011-11-16T02:33:43.373 に答える
0

彼らの塩に値するウェブホストは、public_html(またはその他)フォルダーの上にディレクトリを提供します。あなたの場合は、そこにセッション用のディレクトリを作成できますが、Web からアクセスすることはできません。

あなたのホスティングが非常にくだらないもので、FTP/SSH/HTTP 経由でアクセスできるものすべてを使用できるようになっている場合、事態はさらに煩わしくなります。

つまらないホストを持っていると仮定して、ここにいくつかのアイデアがあります:

1) Web ルート内にセッションを保存し、.htaccess を使用して参照できないようにします。

2) セッションデータをデータベースに保存します。

これらのオプションのいずれかを使用すると、ini-set() を介して独自のガベージ コレクション ルールを設定でき、他のプロセスがセッションを破壊するのを回避できます。

于 2011-11-16T02:41:18.667 に答える