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秒後にリセットされます。
PHPのセッションはCookieタイプのセッションで動作しますが、サーバー側ではセッション情報は常に削除されます。
PHPでタイムライフを設定するには、session_startの前に session_set_cookie_params 関数を使用できます。
session_set_cookie_params(3600,"/");
session_start();
たとえば、3600秒は1時間、2時間は3600 * 2 = 7200です。
しかし、それはセッションCookieであり、ブラウザはそれ自体で期限切れになる可能性があります。長時間のセッション(ログインを記憶するなど)を保存する場合は、サーバーにデータを保存し、クライアント側に標準のCookieを保存する必要があります。
テーブル「セッション」を持つことができます:
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呼び出しを保存してください。
次のphpパラメーターを同じ値に秒単位で設定します。
session.cookie_lifetime
session.gc_maxlifetime
php.ini、.htaccessなどで
ini_set('session.cookie_lifetime', 86400);
ini_set('session.gc_maxlifetime', 86400);
1日。
リンク:
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
セッションは、php.iniファイルまたは.htaccessファイルで構成できます。 PHPセッションのドキュメント をご覧ください。
基本的にやりたいことは、session.cookie_lifetime
をphp.iniに追加し、その値を0にして、ブラウザが閉じられるまでセッションCookieが有効になるようにします。そのファイルを編集できない場合は、php_value session.cookie_lifetime 0
を.htaccessファイルに追加します。
ほとんどのセッションはCOOKIEに保存されるため(上記のコメントと解決策に従って)、COOKIEが安全なセッション(フロントC#)であることを確認することが重要です。
myHttpOnlyCookie.HttpOnly = true;
および/またはphp.ini(php 5.3以降はデフォルトTRUE):
session.cookie_httponly = True