Heim Web-Frontend js-Tutorial 关闭ie窗口清除Session的解决方法_javascript技巧

关闭ie窗口清除Session的解决方法_javascript技巧

May 16, 2016 pm 05:04 PM
ie session

复制代码 代码如下:

//function window.onunload() { alert('这就是你要做的事,关闭网页之后做的! '); location = 'SessionClear.aspx'; }
        //function window.onbeforeunload() { alert('这就是你要做的事,关闭网页之前做的! ') }

        function window.onunload() {

            if ((window.screenLeft >= 10000 && window.screenTop >= 10000) || event.altKey) {
                alert(window.screenLeft+","+window.screenTop);
                //用户非正常关闭时需要触发的动作
                location = 'Handler1.ashx';
            }
        }

   


Handler1.ashx:
复制代码 代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Web.SessionState;

namespace WebApplication1
{
    ///


    /// $codebehindclassname$ 的摘要说明
    ///

    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    public class Handler1 : IHttpHandler,IRequiresSessionState
    {

        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/plain";
            context.Session.Abandon();
            context.Session.Clear();
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
}


解释:

一般的会员形式的网站,在会员登陆后都会建立会话或者Cookie,然后需要在会员退出时点退出连接或按纽退出。在会员直接关闭窗体的时候,没有触发涉及到退出的一系列退出。而这些要等到服务器会话过期才会被清除掉。

有幸的是在网络上终于找到可以捕获用户使用Alt+F4、标题栏按右键关闭、双击标题栏、直接按关闭按钮的事件的方法。当然对于最小化到任务栏再进行关闭是不能捕获的。

复制代码 代码如下:



说明:
window.screenLeft = 10000 + 边框宽 (2×2) = 10004
window.screenTop = 10000 + 工具栏高 + 标题栏高 = 10097

需要说明的,在onBeforeUnload中屏幕这些坐标属性都是正常数值。

screenLeft:获取浏览器客户区左上角相对于屏幕左上角的 x 坐标。

screenTop:获取浏览器客户区左上角相对于屏幕左上角的 y 坐标。

我猜测,在窗体销毁时捕获的将产生一个特殊的数值。在正常情况下的点击测试,数值都不会超过该数值。

现在问题是,在onBeforeUnload中使用window.location可以正常地提交请求到指定URL,但在onUnload事件中该方法不能有效执行。解决的方法是新开一个窗口,在将之关闭掉。

我们可以写上这样的话,来代替以往使用的,一系列的window.location。因为门户网站涉及到多个跨服务器的网站服务器。在统一入口退出后,需要依次地进行顺序退出,才能达到门户网站期望的效果。

var newWindow;
window.opener=null;
newWindow=window.open(URL,PageName, 'height=0,width=0');
newWindow.opener=null;
newWindow.close();
……

该段代码已经经过测试,在onUnload里不要使用window.close,因为对象销毁前会立即触发该事件。而onBeforeUnload是页面将要被卸载前触发的事件。

而所谓的清除实质上就是把做好退出功能的页面,直接以打开新窗口方式的调用。可能在调用到关闭的时候能停顿一两秒,或者关闭窗口放在专门的退出页面。该页面与正常退出又切回到首页,不同的是退出后会自动进行关闭,不需要再另外进行控制直接打开即可。

[注意]在window.onUnload中如果不加判断,则会在刷新页面等导致当前页面变化都会触发该事件。因此必须要进行判断,捕捉特定的操作,才能屏蔽掉一些正常的操作。

续:在IE中如何在用户直接关闭窗口前清除Session

昨天曾经讲解了实现思路,但在实际操作中发现,必须要加上延迟才能确保程序可以正常执行完毕。下面附上实现的细节,并附上简单的时间延迟函数。代码已经经过测试。

复制代码 代码如下:



二,在窗口加载或退出时,想让浏览器刷新一次可以如下操作:

   开窗时刷新
关闭时刷新
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

So legen Sie das Sitzungszeitlimit in der SpringBoot-Sitzung fest So legen Sie das Sitzungszeitlimit in der SpringBoot-Sitzung fest May 15, 2023 pm 02:37 PM

Das Problem wurde im Springboot-Projekt-Produktions-Session-Out-Timeout gefunden: In der Testumgebung wurde der Session-Out durch Ändern der application.yaml konfiguriert, nachdem die Session-Out-Konfiguration überprüft wurde In Kraft trat, wurde die Ablaufzeit für die Veröffentlichung in der Produktionsumgebung direkt auf 8 Stunden festgelegt. Allerdings habe ich am Mittag die Rückmeldung von Kunden erhalten, dass die Projektablaufzeit kurz eingestellt wurde. Wenn eine halbe Stunde lang keine Aktion ausgeführt wird, läuft die Sitzung ab und erfordert wiederholte Anmeldungen. Lösen Sie das Problem der Handhabung der Entwicklungsumgebung: Das Springboot-Projekt verfügt über integriertes Tomcat, sodass der in application.yaml im Projekt konfigurierte Sitzungsausgang wirksam ist. Produktionsumgebung: Die Produktionsumgebung ist freigegeben

So beheben Sie Sitzungsfehler So beheben Sie Sitzungsfehler Oct 18, 2023 pm 05:19 PM

Ein Sitzungsfehler wird normalerweise durch den Ablauf der Sitzungslebensdauer oder das Herunterfahren des Servers verursacht. Die Lösungen: 1. Verlängern Sie die Lebensdauer der Sitzung. 3. Verwenden Sie Cookies. 4. Aktualisieren Sie die Sitzung.

Lösung für das domänenübergreifende Problem der PHP-Sitzung Lösung für das domänenübergreifende Problem der PHP-Sitzung Oct 12, 2023 pm 03:00 PM

Lösung des domänenübergreifenden Problems von PHPSession Bei der Entwicklung der Front-End- und Back-End-Trennung sind domänenübergreifende Anforderungen zur Norm geworden. Wenn es um domänenübergreifende Probleme geht, nutzen wir in der Regel Sitzungen und verwalten diese. Aufgrund von Richtlinieneinschränkungen für den Browserursprung können Sitzungen jedoch standardmäßig nicht über Domänen hinweg gemeinsam genutzt werden. Um dieses Problem zu lösen, müssen wir einige Techniken und Methoden verwenden, um eine domänenübergreifende gemeinsame Nutzung von Sitzungen zu erreichen. 1. Die häufigste Verwendung von Cookies zum domänenübergreifenden Teilen von Sitzungen

Was soll ich tun, wenn die PHP-Sitzung nach der Aktualisierung verschwindet? Was soll ich tun, wenn die PHP-Sitzung nach der Aktualisierung verschwindet? Jan 18, 2023 pm 01:39 PM

Lösung für das Problem, dass die PHP-Sitzung nach der Aktualisierung verschwindet: 1. Öffnen Sie die Sitzung über „session_start();“ 2. Schreiben Sie alle öffentlichen Konfigurationen in eine PHP-Datei 3. Der Variablenname darf nicht mit dem Array-Index identisch sein; 4. Überprüfen Sie einfach den Speicherpfad der Sitzungsdaten in phpinfo und prüfen Sie, ob die Sitzung im Dateiverzeichnis erfolgreich gespeichert wurde.

Was ist die Standardablaufzeit von Session PHP? Was ist die Standardablaufzeit von Session PHP? Nov 01, 2022 am 09:14 AM

Die Standardablaufzeit der Sitzungs-PHP beträgt 1440 Sekunden, also 24 Minuten. Das heißt, wenn der Client länger als 24 Minuten nicht aktualisiert wird, läuft die aktuelle Sitzung ab, wenn der Benutzer den Browser schließt Die Sitzung wird nicht mehr existieren.

So lösen Sie das Problem, dass die Timeout-Einstellung für die Springboot2-Sitzung ungültig ist So lösen Sie das Problem, dass die Timeout-Einstellung für die Springboot2-Sitzung ungültig ist May 22, 2023 pm 01:49 PM

Problem: Heute ist in unserem Projekt ein Zeitüberschreitungsproblem aufgetreten, und Änderungen an den application.properties von SpringBoot2 wurden nie wirksam. Lösung: Die server.*-Eigenschaften werden verwendet, um den eingebetteten Container zu steuern, der von SpringBoot verwendet wird. SpringBoot erstellt eine Instanz des Servlet-Containers mithilfe einer der ServletWebServerFactory-Instanzen. Diese Klassen verwenden server.*-Eigenschaften, um den kontrollierten Servlet-Container (Tomcat, Jetty usw.) zu konfigurieren. Wenn die Anwendung als WAR-Datei auf einer Tomcat-Instanz bereitgestellt wird, gelten die server.*-Eigenschaften nicht. Sie gelten nicht,

So implementieren Sie die SMS-Anmeldung in der Redis-Anwendung für gemeinsam genutzte Sitzungen So implementieren Sie die SMS-Anmeldung in der Redis-Anwendung für gemeinsam genutzte Sitzungen Jun 03, 2023 pm 03:11 PM

1. Implementieren der SMS-Anmeldung basierend auf der Sitzung 1.1 Ablaufdiagramm der SMS-Anmeldung 1.2 Implementieren des Sendens eines SMS-Bestätigungscodes Beschreibung der Front-End-Anfrage: Beschreibung der Anfragemethode POST-Anfragepfad/Benutzer/Code-Anfrageparameter Telefon (Telefonnummer) Rückgabewert Keine Back-End-Schnittstelle Implementierung: @Slf4j@ ServicepublicclassUserServiceImplextendsServiceImplimplementsIUserService{@OverridepublicResultsendCode(Stringphone,HttpSessionsession){//1 Überprüfen Sie die Mobiltelefonnummer, wenn

Was sind die Unterschiede zwischen JavaScript- und PHP-Cookies? Was sind die Unterschiede zwischen JavaScript- und PHP-Cookies? Sep 02, 2023 pm 12:29 PM

JavaScript-Cookies Die Verwendung von JavaScript-Cookies ist die effektivste Möglichkeit, Präferenzen, Käufe, Provisionen und andere Informationen zu speichern und zu verfolgen. Informationen, die für ein besseres Besuchererlebnis oder Website-Statistiken benötigt werden. PHPCookieCookies sind Textdateien, die auf Client-Computern gespeichert und zu Nachverfolgungszwecken aufbewahrt werden. PHP unterstützt transparent HTTP-Cookies. Wie funktionieren JavaScript-Cookies? Ihr Server sendet einige Daten in Form eines Cookies an den Browser Ihres Besuchers. Browser können Cookies akzeptieren. Falls vorhanden, wird es als reiner Textdatensatz auf der Festplatte des Besuchers gespeichert. Wenn ein Besucher nun eine andere Seite der Website erreicht

See all articles