none
Очистить значение session при закрытии страницы RRS feed

Ответы

  • Да, забыл совсем.

    using System.Web;
    using System.Web.SessionState;
    
    namespace WebApplication
    {
      /// <summary>
      /// Summary description for SessionClose
      /// </summary>
      public class SessionClose : IHttpHandler, IRequiresSessionState
      {
    
        public void ProcessRequest(HttpContext context)
        {
          //context.Response.ContentType = "text/plain";
          //context.Response.Write("Hello World");
          context.Session.Abandon();
        }
    
        public bool IsReusable
        {
          get
          {
            return false;
          }
        }
      }
    }


    Сделаем содержимое сообщества лучше, вместе!

    • Помечено в качестве ответа Program-s.g 23 ноября 2013 г. 10:41
    23 ноября 2013 г. 10:33
    Модератор

Все ответы

  • А речь об анонимных пользователях или зарегистрированных?

    Сделаем содержимое сообщества лучше, вместе!

    22 ноября 2013 г. 16:28
    Модератор
  • Речь об анонимных пользователях
    22 ноября 2013 г. 16:40
  • В общем общий алгоритм такой. Создаём клиентский скрипт который будет реагировать на события закрытия браузера:

    <%@ Page Language="C#" AutoEventWireup="true" 
      CodeBehind="WebForm.aspx.cs" Inherits="WebApplication.WebForm" 
      EnableEventValidation="false" %>
    
    <!DOCTYPE html>
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
      <title></title>
      <script src="Scripts/jquery-2.0.3.js" type="text/javascript"></script>
    </head>
    <body>
      <form id="form1" runat="server">
        <div>
         
        </div>
      </form>
      <script type="text/javascript">
        window.onbeforeunload = function ()
        {
          //alert("");
          $.ajax({ url: '/SessionClose.ashx' });
        }
      </script>
    </body>
    </html>

    Добавляете обработчик, который будет чистить сессию.

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    
    namespace WebApplication
    {
      /// <summary>
      /// Summary description for SessionClose
      /// </summary>
      public class SessionClose : IHttpHandler
      {
    
        public void ProcessRequest(HttpContext context)
        {
          //context.Response.ContentType = "text/plain";
          //context.Response.Write("Hello World");
          context.Session.Abandon();
        }
    
        public bool IsReusable
        {
          get
          {
            return false;
          }
        }
      }
    }
    И всё. Но только это будет работать тогда, когда браузер закрывается кнопкой закрыть. А если принудительно завершить процесс (например через диспетчер задач), то события на JS не будут срабатывать.


    Сделаем содержимое сообщества лучше, вместе!

    • Предложено в качестве ответа YatajgaEditor 23 ноября 2013 г. 8:15
    23 ноября 2013 г. 8:14
    Модератор
  • Ну а в случае с залогиненными пользователями их сессия очищается после выхода, автоматически.

    Сделаем содержимое сообщества лучше, вместе!

    23 ноября 2013 г. 8:15
    Модератор
  • Спасибо за ответ! Только у меня ошибка в обработчике, ошибка для context.Session. ( System.NullReferenceException)
    23 ноября 2013 г. 10:25
  • Да, забыл совсем.

    using System.Web;
    using System.Web.SessionState;
    
    namespace WebApplication
    {
      /// <summary>
      /// Summary description for SessionClose
      /// </summary>
      public class SessionClose : IHttpHandler, IRequiresSessionState
      {
    
        public void ProcessRequest(HttpContext context)
        {
          //context.Response.ContentType = "text/plain";
          //context.Response.Write("Hello World");
          context.Session.Abandon();
        }
    
        public bool IsReusable
        {
          get
          {
            return false;
          }
        }
      }
    }


    Сделаем содержимое сообщества лучше, вместе!

    • Помечено в качестве ответа Program-s.g 23 ноября 2013 г. 10:41
    23 ноября 2013 г. 10:33
    Модератор
  • Спасибо огромное !
    23 ноября 2013 г. 10:42
  • Не за что.

    Сделаем содержимое сообщества лучше, вместе!

    23 ноября 2013 г. 10:43
    Модератор