2012-05-28 4 views
0

Как отключить СЕССУЮ, когда я закрою страницу, нажав [x] (не onunload). Я хочу вставить при открытии страницы и при закрытии, но я не хочу вставлять ее при обновлении.как отключить сеанс при закрытии веб-страницы в php

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"]); 
} 
+0

Вы будете записывать в sqli hell для вставки переменных непосредственно в запрос. Используйте PDO или mysqli и вставьте их в качестве параметров –

+0

Почему вы не можете позволить функции JavaScript обнаруживать, когда пользователь уходит? –

+0

Возможный дубликат [Закрыть/убить сеанс, когда браузер или вкладка закрыты] (http://stackoverflow.com/questions/1921941/close-kill-the-session-when-the-browser-or-tab-is -closed) – Quentin

ответ

1

Сделать Ajax вызовов на PHP на JS события загрузки страницы и прямо перед отпуском (onbeforeunload событие).

Лучше полагаться на библиотеку JS, такую ​​как jQuery, поскольку прямая межсетевая реализация 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"; 
} 
?> 
+0

Это не решает проблему обновления страницы? –

+0

yes piers that right –

+0

piers Вы сказали: Почему вы не можете позволить функции JavaScript обнаруживать, когда пользователь уходит? , как я могу это сделать, пожалуйста, –

0
session_set_cookie_params(0); 
session_start() 

Руководство: http://www.php.net/manual/en/function.session-set-cookie-params.php


Для уточнения:

You хотите убить сеанс, когда пользователь больше не посещает ваш сайт? Но если они останутся на вашем сайте (кнопка возврата, вперед и т. Д.), Вы хотите сохранить сеанс.

Чтобы ответить на прямой вопрос - вы не можете отслеживать, когда пользователь закрывает браузер, т. Е. Когда они нажимают на «x», как указано в комментариях.

Вы не можете использовать «onunload», потому что это происходит, когда пользователь может щелкнуть по странице на вашем сайте.

Так у вас есть четыре варианта:

1) Ручное управление ваших сеансов с использованием куки, и установите печенье истекает, когда сеанс браузера заканчивается.

2) Mofify session_set_cookie_params (0) http://www.php.net/manual/en/function.session-set-cookie-params.php, поэтому сеанс заканчивается при закрытии браузера.

3) php.ini session.cookie_lifetime рынках сырья до 0 (сессия заканчивается, когда браузер закрывается - так же, как описано выше, но более глобальный)

4) Иметь АЯКС перезвонить через каждые 30 секунд, и если вы не» t получить обратный вызов через минуту, предположить, что браузер закрыт, а затем убить сеансы. (Требуется довольно много обработки!)

Смежные вопросы