1

私はウェブサイトを立ち上げています、そして私はむしろ人々のコンピュータにクッキーを置きたくありません。セッションの最大タイムアウトを1日または2日に延長することは、悪い習慣ですか、さらに悪いことに、めちゃくちゃ安全ではありませんか?

    session_regenerate_id();
    $profileid = $userdata['userid'];
    $profile = $userdata['username'];
    //Set session
    $_SESSION['profileid'] = $profileid;
    //Put name in session
    $_SESSION['profile'] = $profile;
    $_SESSION['loggedin'] = true;

編集:コードを追加しました。編集:私が変更するphp.ini行は次のとおりです:

session.gc_maxlifetime = 1440
4

2 に答える 2

1

コードが一般的に安全である限り、特に安全でないものはないと思います。

でも

a)ユーザーがブラウザを閉じると、データが失われます。これは、何らかの理由で行われる可能性があります。ユーザーが特にオプトアウトしない限り、セッション間でデータを長期間保持する必要がある場合は、Cookieを使用してください。そうでなければ、クッキーなしを主張することは一種の逆効果のようです。明確にするために、私が言いたいのは、標準のセッションの有効期間が十分に長くない場合は、データを格納するために$_SESSIONを使用するべきではないということです。その性質上、$ _ SESSIONは一時的なものであり、かなり一時的なものにのみ使用できます。

b)すべてのCookieを防ぐために本当に余分な努力をしているのでない限り、PHPセッションIDはとにかくCookieを使用して設定されるので、本当にユーザーに有利なことをしていますか?

于 2012-05-07T00:55:20.060 に答える
1

session.gc_maxlifetime

session.gc_maxlifetimeは、データが「ガベージ」と見なされ、クリーンアップされる可能性があるまでの秒数を指定します。ガベージコレクションは、セッションの開始中に発生する可能性があります(session.gc_probabilityおよびsession.gc_divisorによって異なります)。

この値(デフォルトは1440秒または[24分])は、未使用のPHPセッションが存続する期間を定義します。

例:ユーザーがログインし、アプリケーションまたはWebサイトを数時間、数日間閲覧します。問題ない。クリック間の時間が1440秒を超えない限り。タイムアウト値です、

PHPのセッションガベージコレクターは、 session.gc_probabilityをsession.gc_divisorで割った確率で実行されます。デフォルトでは、これは1/100です。これは、上記のタイムアウト値が100分の1の確率でチェックされることを意味します。

したがって、ユーザーがサイトをクリックしないことを期待しない限り、この値を増やしてもスクリプトに大きな影響はない可能性があります。ログインしたユーザーが長いビデオを視聴し、視聴した後、自分がログアウトしていることに気付く場合のように。この場合、セッションを開いたままにするために、JavaScriptを使用して20分ごとにサーバーをポーリングする必要があります。

于 2012-05-07T00:59:20.823 に答える