Как обработать конец сессии в global.asax?

Я переделал ваш php-код, чтобы вы могли получить желаемый результат.

Вместо строк assignind, возвращаемых из запроса mysql, создайте ассоциативный массив в соответствии с вашим требованием, а затем преобразуйте его в json


<?php

$host = "localhost"; /* Host name */
$user = "root"; /* User */
$password = ""; /* Password */
$dbname = "mydb"; /* Database name */

$con = mysqli_connect($host, $user, $password,$dbname);
// Check connection
if (!$con) {
    die("Connection failed: " . mysqli_connect_error());
}

    $res_arr = array();
$query = '
    SELECT 
c.id,
c.category_name,
c.buyer_userid,
p.id,
p.product_name,
p.buyer_userid,
p.category_id,
s.items_id,
s.item_name,
s.quantity
    FROM `categorys` c
        INNER JOIN `product` p ON c.id=p.category_id
        INNER JOIN `sales` s ON p.id=s.product_id
    ORDER BY c.id';

    $result = mysqli_query($con,$query);
    while($row = mysqli_fetch_array($result)){    

        $res['id'] = $row[0];
        $res['cat_name'] = $row[1];
        $res['catbuy_userid'] = $row[2];
        $res['products_info']['id'] = $row[3];

        $res['products_info']['productid'] = $row[4];
        $res['products_info']['product_name'] = $row[5];
        $res['products_info']['buyer_userid'] = $row[6];

        $res['products_info']['sales_info']['items_id'] = $row[7];
        $res['products_info']['sales_info']['items_name'] = $row[8];
        $res['products_info']['sales_info']['buyer_userid'] = $row[6];
        $res['products_info']['sales_info']['quantity'] = $row[9];

        $res_arr[] = $res;
  }

}
  echo json_encode($res_arr);

?>

11
задан Canavar 7 March 2009 в 12:22
поделиться

3 ответа

Добавьте файл Global.asax к своему веб-сайту, и в событии Session_End, Вы удаляете пользователя из своего HashTable.

protected void Session_End(Object sender, EventArgs e)
{
    // Remove user from HashTable
}
14
ответ дан 3 December 2019 в 00:59
поделиться

Можно использовать событие конца сессии global.asax для удаления неожиданно разъединенного пользователя:

void Session_End(Object sender, EventArgs E) {
    // Clean up session resources
}

но остерегайтесь, сессия не заканчивается, когда пользователь закрывает свой браузер или свою потерю соединения. Это заканчивается когда достигнутый тайм-аут сессии.

28
ответ дан 3 December 2019 в 00:59
поделиться

Событие Session_End не стреляет, когда браузер закрывается, это стреляет, когда сервер не получил запрос от пользователя в определенном человеке времени (значением по умолчанию 20 минут). Это означает, что, если Вы используете Session_End для удаления пользователей, они будут оставаться в чате в течение 20 минут после того, как они закрыли браузер.

Я предлагаю, чтобы Вы сохранили время последнего запроса в пользовательском объекте. Тем путем можно определить, насколько активный пользователь, и как, вероятно, случается так, что пользователь оставил чат. Можно, например, показать любому пользователю, который ничего не делал в течение двух минут как неактивного.

Можно также позволить приложению чата периодически опрашивать сервер (если Вы уже не делаете этого). Это обновило бы в прошлый раз запроса в объекте и поддержало бы пользователя, пока окно чата открыто.

Можно использовать onunload событие в браузере для отправления запроса выхода из системы к серверу, когда пользователь оставляет страницу. Это, конечно, только работает, если у пользователя все еще есть сетевая возможность соединения. onunload событие также инициировано при перезагрузке страницы таким образом, необходимо было бы отслеживать то, почему событие инициировано для использования его.

7
ответ дан 3 December 2019 в 00:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: