0

[x] をクリックしてページを閉じたときに (onunload ではなく)、SESSION の設定を解除するにはどうすればよいですか。ページを開く時と閉じる時は挿入したいが、リフレッシュ時は挿入したくない。

if (!isset($_SESSION["visits"]))
    $_SESSION["visits"] = 0;
    $_SESSION["visits"] = $_SESSION["visits"] + 1;
if ($_SESSION["visits"] > 1){echo "You hit the refresh button!";}
else{
    mysql_query(
        "INSERT INTO najd_visit( visit_userId, visit_staticId, visit_page,
            visit_enterTime)VALUES ('$userId', '$Sid', '$title', '$date') ");
    echo "This is my site";
    //unset($_SESSION["visits"]);
}
4

2 に答える 2

1

onbeforeunloadページ読み込みの JS イベントと終了直前 (イベント)で、php への ajax 呼び出しを行います。

jQuery などの JS ライブラリに依存することをお勧めします。両方のイベント リスナーの JS クロスブラウザ実装を直接コーディングするのは非常に難しいためです。

更新。@piers コメントのおかげで、ページの更新時にカウントアップされるため、ソリューションが完全ではないことがわかります。タスクを正しく理解している場合、目標は、更新イベントをカウントするのではなく、ページのオープンとリーブをカウントすることです。

したがって、おそらく、ページを閉じるときにセッションの設定を解除する必要は実際にはありません。サーバーでのタイムアウト時にセッションが消えるようにしますか?

session_id を使用して、ページ/セッションのペアが一意かどうかを判断できます。たとえば、訪問したページの URL をセッションに保持して、それが既にカウントされているかどうかを確認できます。

<?php
$uri = $_SERVER['REQUEST_URI'];
if( is_set( $_SESSION['seen']) {
    if( !in_array( $uri, $_SESSION['seen'])){
        countup( $uri);
    } else {
        // already counted that page
    }
} else { // session doesn't have the seen array yet
    countup( $uri);
}

function countup( $uri) {
    $_SESSION['seen'][] = $uri;
    mysql_query( "
        INSERT INTO najd_visit 
        ( visit_userId, visit_staticId, visit_page, visit_enterTime)
        VALUES ('$userId', '$Sid', '$title', '$date')
    ");
    echo "This is my site";
}
?>
于 2012-05-28T12:01:50.977 に答える
0
session_set_cookie_params(0);
session_start()

マニュアル: http://www.php.net/manual/en/function.session-set-cookie-params.php


明確にするために:

ユーザーがサイトにアクセスしなくなったときにセッションを終了したいですか? しかし、それらがあなたのサイトにとどまる場合 (戻るボタン、進むなど)、セッションを維持したいと考えています。

直接の質問に答えるには、ユーザーがいつブラウザを閉じるかを追跡することはできません。つまり、コメントで要求されているように、「x」をクリックしたときです。

"onunload" は使用できません。これは、ユーザーがサイトのページ スティルにフリックしている可能性がある場合に発生するためです。

したがって、次の 4 つのオプションがあります。

1) Cookie を使用してセッションを手動で制御し、ブラウザ セッションが終了したときに Cookie の有効期限が切れるように設定します。

2) session_set_cookie_params(0) http://www.php.net/manual/en/function.session-set-cookie-params.phpを変更 して、ブラウザーを閉じたときにセッションが終了するようにします。

3) Modity php.ini session.cookie_lifetime を 0 (ブラウザを閉じるとセッションが終了します - 上記と同じですが、よりグローバルです)

4) 30 秒ごとに ajax コールバックを行い、1 分経ってもコールバックが得られない場合は、ブラウザが閉じられたと見なしてセッションを強制終了します。(かなりの処理が必要です!)

于 2012-05-28T12:13:22.737 に答える