26

PHPでセッションの有効期間を設定するには? リクエストが存在する限り、永遠に設定したいです。リクエストは AJAX です。AJAX リクエストを処理する私の PHP コードは次のとおりです。

// 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 秒後にリセットされます。

4

7 に答える 7

41

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 呼び出しを保存してください。

于 2011-06-15T15:39:37.693 に答える
23

次の 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

于 2014-06-22T11:47:17.257 に答える
4

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

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

于 2011-06-15T15:24:00.123 に答える
-3

ユーザーが Cookie を削除したりブラウザを閉じたりしない限り、セッションは存続します。

于 2011-06-15T15:22:45.273 に答える