Das Problem
Das ASP.NET Session Cookie funktioniert nicht mehr wie es soll. Befindet man in einer Webapplikation und ist angemeldet, oder hält irgendeinen anderen Status in der ASP.NET Session, teilt sich diese Information auch mit neu geöffneten Browsern oder Fenstern. Es ist also beispielsweise nicht möglich, sich mit einem anderen Benutzer in einer zweiten Browserinstanz an derselben Applikation anzumelden.
Der Übeltäter
Nach langer Suche haben wir festgestellt, dass der Cookie-Manager im EfA-Fontsize Skript buggy ist. Das eingebundene Cookie-Skript geht alle Cookies (vorher in this.cookies abgelegt) durch und schreibt sie neu.
for(var name in this.cookies) { expires = (this.expiration[name])?this.expiration[name]:this.defaultExpiration; path = this.defaultPath; domain = this.defaultDomain; if(name) { var cookies = name + '=' + this.cookies[name] + '; expires=' + expires + '; path=' + path + '; domain=' + domain; if(cookies != '') { document.cookie = cookies; } } }
Dabei wird die expires auf Heute+7 Tage gesetzt. Der Wert wird zwar über this.expiration[name] vermeintlich "wiederhergestellt", er wurde aber nie abgelegt. Dadurch werden temporäre Cookies zu permanenten. Auch path und domain für alle Cookies auf den gleichen Wert zu setzen ist ein kleines Verbrechen.
Cookiemanager.prototype.getExpiration = function() { var date = new Date(); date.setTime(date.getTime()+(7*24*60*60*1000)); return date.toGMTString(); }
Die Lösung
Das Skript für die EfA-Fontsize-Switcher scheint nicht mehr verfügbar zu sein: http://www.einfach-fuer-alle.de/artikel/fontsize/
Also habe ich mir auch nicht die Mühe gemacht, dass Skript zu patchen, sondern den Cookiemanager durch ein jQuery Plugin ersetzt.
- Plugin herunterladen und einbinden: Plugins | jQuery Plugins | Cookie
- Die Datei efa_fontsize.js anpassen
- Alle anderen Referenzen auf cookies.js aktualisieren oder entfernen und die Skript-Datei löschen.
Efa_Fontsize06.prototype.getCookie = function() { var cookie = $.cookie(this.cookieName); return (cookie)?cookie:false; } Efa_Fontsize06.prototype.setCookie = function(cookieValue) { return $.cookie(this.cookieName, cookieValue, { expires: 7, path: '/' }); }