web-dev-qa-db-ja.com

セッションの有効期間を設定する方法

PHPでセッションの有効期間を設定する方法は?リクエストが存在する限り、永久に設定したいです。要求はAJAXです。 My PHP AJAXリクエストを処理するコード:

// AJAX.php
<?php    
session_start();

$_SESSION['counter'] = $_SESSION['counter'] + 1;

header('Content-type: application/json');    
echo json_encode(array('tick' => $_SESSION['counter']));
?>

javaScript

$(document).ready(function() {            
function check() {
    getJSON('ajax.php');        
}

function getJSON(url) {                                
    return $.getJSON(
                url,
                function(data) {
                    $("#ticker").html(data.tick);
                }
           );
}

setInterval(function() {
    check();
}, 10000); // Tick every 10 seconds

});

セッションは常に300秒後にリセットされます。

24
brian

PHPのセッションはCookieタイプのセッションで動作しますが、サーバー側ではセッション情報は常に削除されます。

PHPでタイムライフを設定するには、session_startの前に session_set_cookie_params 関数を使用できます。

session_set_cookie_params(3600,"/");
session_start();

たとえば、3600秒は1時間、2時間は3600 * 2 = 7200です。

しかし、それはセッションCookieであり、ブラウザはそれ自体で期限切れになる可能性があります。長時間のセッション(ログインを記憶するなど)を保存する場合は、サーバーにデータを保存し、クライアント側に標準のCookieを保存する必要があります。

テーブル「セッション」を持つことができます:

  • session_id int
  • session_hash varchar(20)
  • session_dataテキスト

Cookieの検証では、クライアント側で「セッションID」と「ハッシュ」(セキュリティ用)を保存し、サーバー側でセッションのデータを保存できます。例:

ログイン時:

setcookie('sessid', $sessionid, 604800);      // One week or seven days
setcookie('sesshash', $sessionhash, 604800);  // One week or seven days
// And save the session data:
saveSessionData($sessionid, $sessionhash, serialize($_SESSION)); // saveSessionData is your function

ユーザーが戻る場合:

if (isset($_COOKIE['sessid'])) {
    if (valide_session($_COOKIE['sessid'], $_COOKIE['sesshash'])) {
        $_SESSION = unserialize(get_session_data($_COOKIE['sessid']));
    } else {
        // Dont validate the hash, possible session falsification
    }
}

明らかに、データを送信する前に、すべてのセッション/ Cookie呼び出しを保存してください。

34
Exos

次のphpパラメーターを同じ値に秒単位で設定します。

session.cookie_lifetime
session.gc_maxlifetime

php.ini、.htaccessなどで

ini_set('session.cookie_lifetime', 86400);
ini_set('session.gc_maxlifetime', 86400);

1日。

リンク:

http://www.php.net/manual/en/session.configuration.php

http://www.php.net/manual/en/function.ini-set.php

15
scasei

PHP 7より前では、session_start()関数は設定オプションを直接受け入れませんでした。

<?php
// This sends a persistent cookie that lasts a day.
session_start([
    'cookie_lifetime' => 86400,
]);
?>

リファレンス: https://php.net/manual/en/function.session-start.php#example-5976

6
Jose

セッションは、php.iniファイルまたは.htaccessファイルで構成できます。 PHPセッションのドキュメント をご覧ください。

基本的にやりたいことは、session.cookie_lifetimeをphp.iniに追加し、その値を0にして、ブラウザが閉じられるまでセッションCookieが有効になるようにします。そのファイルを編集できない場合は、php_value session.cookie_lifetime 0を.htaccessファイルに追加します。

3

ほとんどのセッションはCOOKIEに保存されるため(上​​記のコメントと解決策に従って)、COOKIEが安全なセッション(フロントC#)であることを確認することが重要です。

myHttpOnlyCookie.HttpOnly = true;

および/またはphp.ini(php 5.3以降はデフォルトTRUE):

session.cookie_httponly = True
0
matrixb51