#1 Weiterleitung mit Cookie Path in JavaScript von toggodamian 20.02.2012 14:33

avatar

Hallo Florian,
Da Movert und ich seit längeren nun Gemeinsame Projekte machen, und nun ein Portal gemacht haben (Sehe hier: http://communityportal.xobor.de/page-portal.html) möchten wir nun auch das es auf diese Seite weiterleitet beim ersten aufruf der Forum Übersicht. Florian

#2 RE: Weiterleitung mit Cookie Path in JavaScript von florian-zier 23.02.2012 17:42

avatar

Hallo toggo,
also als erstes muss ich mal sagen, die Seite sieht ja mal richtig toll aus.

Ein Skript, welches einmalig auf eine andere Seite weiterleitet, habe ich hier einmal so erstellt:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
 
<script type="text/javascript" language="javascript">
/*
* Skript zur einmaligen Weiterleitung auf eine andere Seite.
*
* Parameter:
* - komplette Adresse zur Seite, zu der weitergeleitet werden soll.
* - Zeitintervall das abgewartet werden soll, bevor weitergeleitet wird.
* - Gültigkeitsdauer in Tagen, bevor erneut eine automatische Weiterleitung durchgeführt wird.
*
* Warnung:
* Ohne Aktivierung von Cookies kann es passieren,
* dass die Weiterleitung sich permanent wiederholt!
*/
if (typeof(refer_once) == 'undefined') {
function refer_once(url, timeout, valid) {
if (cookieManager.getCookie('site_visited')!='true' && document.location.href!=url) {
cookieManager.setCookie('site_visited', 'true', valid);
window.setTimeout('document.location.href=\''+url+'\'', timeout);
}
}
}
 
/*
* Skript zur Cookie-Verwaltung.
* Basierend auf:
* http://techpatterns.com/downloads/javascript_cookies.php
*/
if (typeof(cookieManager) == 'undefined') {
var cookieManager = {
getCookie: function( check_name ) {
var a_all_cookies = document.cookie.split( ';' );
var a_temp_cookie = '';
var cookie_name = '';
var cookie_value = '';
var b_cookie_found = false;
var i = '';
for ( i = 0; i < a_all_cookies.length; i++ ) {
a_temp_cookie = a_all_cookies[i].split( '=' );
cookie_name = a_temp_cookie[0].replace(/^\s+|\s+$/g, '');
if ( cookie_name == check_name ) {
b_cookie_found = true;
if ( a_temp_cookie.length > 1 ) {
cookie_value = unescape( a_temp_cookie[1].replace(/^\s+|\s+$/g, '') );
}
return cookie_value;
break;
}
a_temp_cookie = null;
cookie_name = '';
}
if ( !b_cookie_found ) {
return null;
}
},
// Nur "name" und "value" erforderlich:
setCookie: function( name, value, expires, path, domain, secure ) {
var today = new Date();
today.setTime( today.getTime() );
if ( expires ) { // in Tagen
expires = expires * 1000 * 60 * 60 * 24;
}
var expires_date = new Date( today.getTime() + (expires) );
document.cookie = name + "=" +escape( value ) +
( ( expires ) ? ";expires=" + expires_date.toGMTString() : "" ) + //expires.toGMTString()
( ( path ) ? ";path=" + path : "" ) +
( ( domain ) ? ";domain=" + domain : "" ) +
( ( secure ) ? ";secure" : "" );
},
deleteCookie: function( name, path, domain ) {
if ( Get_Cookie( name ) ) document.cookie = name + "=" +
( ( path ) ? ";path=" + path : "") +
( ( domain ) ? ";domain=" + domain : "" ) +
";expires=Thu, 01-Jan-1970 00:00:01 GMT";
}
}
}
</script>
 




Du kopierst es einfach in den Head-Bereich, damit es dann schnellstmöglich ausgeführt wird, solltest du es ziemlich bald, wenn möglich als erstes nach dem öffnenden Body-Tag aufrufen lassen:

1
2
3
 
<script type="text/javascript" language="javascript">
refer_once('http://deineForenUrl.de/portalseite.html',0,30);
</script>
 


Die Zahlen hinter der Weiterleitungs-Adresse bestimmen die Wartezeit (hier: 0) in ms, bis zur nächsten Seite weitergeleitet wird, und die Gültigkeit (hier: 30) in Tagen, bis eine erneute Weiterleitung durchgeführt wird.

Aber Vorsicht: Bei deaktivierten Cookies wird man immer wieder von der Übersicht auf die Portal-Seite weitergeleitet.
Benutzer deines Forums haben die zwar ziemlich sicher aktiviert, um sich überhaupt einloggen zu können, aber trotzdem werden dann eben neue Foren-Besucher mit deaktivierten Cookies permanent wieder weitergeleitet.
Dafür hat das Forum aber glaube ich eine extra Meldung, dass Cookies aktiviert sein müssen, um das Forum korrekt benutzen zu können.
Ggf. könntet ihr diesen Hinweis bei deaktivierten Cookies ja nochmal auf der Portalseite einbauen. (Bei Wolfgang gab es glaube ich ein extra Skript dafür...)
User, welche die Cookies nur für eine Browser-Sitzung behalten, werden dann eben nach dem Schließen des Browser beim ersten erneuten Aufruf der Webseite noch einmal weitergeleitet, da das Cookie keine 30 Tage bestehen konnte und nach Schließen des Browsers gelöscht wurde.
Dies ist aber wie gesagt nur beim ersten Aufruf der Seite nach dem erneuten Öffnen des Browsers der Fall.

Ihr könntet das Skript nach dem Body-Tag noch von Foren-Variablen einrahmen lassen, welche das Skript nur bei unregistrierten Usern ausführen lassen würden.
Dann werden die registrierten User nicht mehr auf die Portalseite weitergeleitet, wenn sie z.B. noch eingeloggt sind aber nach über 30 Tagen direkt die Liste der Beiträge der letzten Tage springen möchten.
Sonst werden sie zuerst mal weitergeleitet und müssen manuell wieder zurücknavigieren.
Wobei das bei nur einer Weiterleitung verkraftbar wäre. (Ansonsten Gültigkeit auf 1 Jahr oder mehr hochschrauben.)
Natürlich aber nicht, falls es gewünscht ist, auch registrierte User wieder auf das Portal zu führen, um ihnen Neuigkeiten mitzuteilen.
Analog ginge das natürlich auf umgekehrt für unregistrierte User, welche erstmal nicht aufs Portal weitergeleitet werden sollen...

Wenn das Skript nicht von jeder Seite aus, sondern nur von der Foren-Übersicht weiterleiten soll, dann dürft ihr es eben nicht auch in die "Obere Leiste" direkt nach dem Body-Tag setzen, sondern müsst es in die "Foren-Übersicht", auch am besten so früh wie möglich, reinsetzen.
Dann wird sozusagen nur beim ersten Aufruf der Hauptseite die Weiterleitung durchgeführt.



Dann wünsche ich euch noch viel Spaß damit!

#3 RE: Weiterleitung mit Cookie Path in JavaScript von toggodamian 24.03.2012 12:20

avatar

Hallo Florian,
Nimms mir nicht übel, aber es ist ein etwas Zulanges Script. Für mich ins Forum ist das kein Problem so, aber zum Anbieten so ist das doch etwas zulange. Wir versuchen die Scripts sehr kurz zu halten, weil es soll für die Übersichtlich sein damit sie besser bearbeiten können. Aber hey, das Script sieht schon ganz gut aus, das ich es wohl bei mir mal bei gebraucht einbauen werde
Also so ganz umsonst hast du es nicht gemacht und ich verbeuge mich von deiner Arbeit die du hier leistest!

#4 RE: Weiterleitung mit Cookie Path in JavaScript von florian-zier 25.03.2012 17:01

avatar

Hallo toggo,
so lange ist das Skript eigentlich gar nicht.

1
2
3
4
5
6
7
8
 
if (typeof(refer_once) == 'undefined') {
function refer_once(url, timeout, valid) {
if (cookieManager.getCookie('site_visited')!='true' && document.location.href!=url) {
cookieManager.setCookie('site_visited', 'true', valid);
window.setTimeout('document.location.href=\''+url+'\'', timeout);
}
}
}
 


Das ist auch schon das wichtigste.

Alles zwischen /* ... */ sind nur Kommentare und dienen als kurze Erklärung, damit man sich daran nochmal kurz zur Verwendung informieren kann.
Das könnte aber genauso gut weggekürzt werden.

Der untere Skript-Teil ist eigentlich nur zur Cookie-Verwaltung.
Es bleibt jedem selbst überlassen, da auch seine eigene Implementierung zu verwenden.
Aber es ist viel zu aufwendig und wird bei mehreren Codes mit Cookie-Verwendung sogar größer, wenn man manuell die Cookies im Skript schreibt.
Außerdem ist dieser Cookie-Manager wiederverwendbar, was bei mehreren Cookie-Skripts dann im Endeffekt ja wie genannt die Größe dann wieder reduzieren kann.
Und die Wahrscheinlichkeit, eine Fehlfunktion in verschiedenen Browsern zu erhalten, ist geringer, da der Manager einige Eigenheiten beachten kann.
Das wäre mit einem einfachen manuellen document.cookie = ... im Skript viel umständlicher und unsicherer in den Ergebnissen.

Der Hauptteil ist also wie du hier siehst der Cookie-Manager:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
 
if (typeof(cookieManager) == 'undefined') {
var cookieManager = {
getCookie: function( check_name ) {
var a_all_cookies = document.cookie.split( ';' );
var a_temp_cookie = '';
var cookie_name = '';
var cookie_value = '';
var b_cookie_found = false;
var i = '';
for ( i = 0; i < a_all_cookies.length; i++ ) {
a_temp_cookie = a_all_cookies[i].split( '=' );
cookie_name = a_temp_cookie[0].replace(/^\s+|\s+$/g, '');
if ( cookie_name == check_name ) {
b_cookie_found = true;
if ( a_temp_cookie.length > 1 ) {
cookie_value = unescape( a_temp_cookie[1].replace(/^\s+|\s+$/g, '') );
}
return cookie_value;
break;
}
a_temp_cookie = null;
cookie_name = '';
}
if ( !b_cookie_found ) {
return null;
}
},
// Nur "name" und "value" erforderlich:
setCookie: function( name, value, expires, path, domain, secure ) {
var today = new Date();
today.setTime( today.getTime() );
if ( expires ) { // in Tagen
expires = expires * 1000 * 60 * 60 * 24;
}
var expires_date = new Date( today.getTime() + (expires) );
document.cookie = name + "=" +escape( value ) +
( ( expires ) ? ";expires=" + expires_date.toGMTString() : "" ) + //expires.toGMTString()
( ( path ) ? ";path=" + path : "" ) +
( ( domain ) ? ";domain=" + domain : "" ) +
( ( secure ) ? ";secure" : "" );
},
deleteCookie: function( name, path, domain ) {
if ( Get_Cookie( name ) ) document.cookie = name + "=" +
( ( path ) ? ";path=" + path : "") +
( ( domain ) ? ";domain=" + domain : "" ) +
";expires=Thu, 01-Jan-1970 00:00:01 GMT";
}
}
}
 


Du kannst dieses Skript auch ohne Probleme in eine .js-Datei auslagern und dann wie CSS (Stylesheets) im Head-Bereich auf der Seite einbinden.
Ab dann kannst du in allen anderen Skripts den Cookie-Manager benutzen.
Wenn die Datei eingebunden ist, dann genügt ja schon der kleine Code ganz oben alleine, da er ja dann den fest eingebundenen und einfach wiederzuverwendenden Cookie-Manager mitbenutzt.


Die meisten Skripts hier im Forum habe ich auch nicht ins Template hier im Forum eingetragen, sondern in einer externen .js-Datei gehostet.
Im Template steht nur der Pfad zu dieser Datei, wenn ich diese dann bearbeite und neu hochlade habe ich neue JavaScript-Funktionen, ohne das Template bearbeiten zu müssen.
Hier mal eine kurze Anleitung, die unter den ersten Google-Ergebnissen war: JavaScript einbinden - externe JavaScript-Datei


Alternativ hätte ich noch einen sehr kurzen Code, der zur Weitergabe geeignet wäre, wenn zumindest nicht mehr zu viel angepasst werden soll:

1
 
if(typeof refer_once=="undefined"){function refer_once(a,b,c){if(cookieManager.getCookie("site_visited")!="true"&&document.location.href!=a){cookieManager.setCookie("site_visited","true",c);window.setTimeout("document.location.href='"+a+"'",b)}}}if(typeof cookieManager=="undefined"){var cookieManager={getCookie:function(a){var b=document.cookie.split(";");var c="";var d="";var e="";var f=false;var g="";for(g=0;g<b.length;g++){c=b[g].split("=");d=c[0].replace(/^\s+|\s+$/g,"");if(d==a){f=true;if(c.length>1){e=unescape(c[1].replace(/^\s+|\s+$/g,""))}return e;break}c=null;d=""}if(!f){return null}},setCookie:function(a,b,c,d,e,f){var g=new Date;g.setTime(g.getTime());if(c){c=c*1e3*60*60*24}var h=new Date(g.getTime()+c);document.cookie=a+"="+escape(b)+(c?";expires="+h.toGMTString():"")+(d?";path="+d:"")+(e?";domain="+e:"")+(f?";secure":"")},deleteCookie:function(a,b,c){if(Get_Cookie(a))document.cookie=a+"="+(b?";path="+b:"")+(c?";domain="+c:"")+";expires=Thu, 01-Jan-1970 00:00:01 GMT"}}}
 


Im Prinzip das gleiche, nur kürzer.
Der Code ist mal gerade so um fast 62% (!!!) gekürzt worden.
Das Tool dazu kann man online bei jscompress verwenden.

Vielleicht hilft dir ja dann das noch weiter.



Edit:
Nicht ganz so viel Kompression ist auch mit Notepad++ und dem Plugin JSMin zu erreichen.
Hier noch ein Artikel, der sich auch etwas mit dem Thema beschäftigt:
http://www.sylvis-blog.de/javascript-kom...-notepad-11941/
(Die Plugins mit FTP-Verwaltung etc. sind natürlich nicht nötig, es geht eher um JSMin im Zusammenspiel mit Notepad++)

Falls du Notepad++ noch nicht so kennst, gibt es noch ein paar tolle Tipps in dem Artikel 10 tolle Tipps für Notepad++.

#5 RE: Weiterleitung mit Cookie Path in JavaScript von toggodamian 01.04.2012 21:08

avatar

Hallo Florian,
Wir möchten eigentlich keinen Kunden über Template-Veränderungen stolpern lassen, zum glück funktioniert es in der Kopfzeile genauso gut wie im Header. Vielleicht gibt es mal eine Verzögerung, wer will kann auch die Gepackte Datei die von mir gehostet wird auch gerne im Template einbauen, aber ein muss wollten wir eigentlich nicht.
Vielen Dank für deine Tatkräftige Arbeit von dir. Deine Ausgezeichnete Arbeit wird erwähnt! Vielleicht hast du auch lust hier erwähnt zu werden: http://www.forum-bewertung.grenzradio911.de/. Ich bewerte deine Seite sehr gerne

#6 RE: Weiterleitung mit Cookie Path in JavaScript von florian-zier 05.04.2012 00:22

avatar

Hallo toggo,
dass ihr natürlich versucht, so wenige Änderungen wie möglich zu benötigen, ist eine erstrebenswerte Sache.
Meistens merkt man dann auch, dass einem selbst die Wartung leichter fällt.

Leider sind viele JavaScripts, welche auf solchen "Sammel-Seiten" angeboten werden, ziemlich durcheinander und auch immer mal wieder etwas fehlerhaft.
Also ist da ein guter Tipp, sich mehrere Skripte rauszusuchen, welche zwar das gleiche tun sollen, aber eines dann doch etwas besser als das andere ist.
Da will ich mich auch gar nicht ganz rausnehmen, gerade die ersten Skripte hätte man vielleicht noch etwas aufpeppen können.
Syntaktisch habe ich immer versucht korrekt zu bleiben (hoffentlich ist mir das einigermaßen gelungen ), aber manche Skripte wären als Objekt angelegt vielleicht noch einen Tick eleganter.
Deshalb werde ich in Zukunft auch weiterhin versuchen, eine einigermaßen einfache/logische/verständliche Struktur zu erreichen.
Leider ist das aber nicht immer (so einfach) möglich, deshalb wirken manche Skripte vielleicht etwas zerstückelt.
Ganz problematisch sind da JavaScripte, welche an mehreren Stellen des Templates gesetzt werden sollten.

Also wird es je nach Anforderung manchmal kaum einen Weg um einige manuelle Änderungen herum geben.
Deinen Ansatz, eine Datei anzufertigen und für die User bereitzustellen ist da natürlich ein toller Service!
Gerade dann macht es Sinn, gut abgestimmten Code zu entwerfen, der leicht verwendbar ist.
Aber man lernt ja immer wieder dazu, zukünftige Codes hier werden nun wohl öfter mal etwas objektorientierter ausfallen, ich werde mir Mühe geben.
Trotzdem werden manche manuellen Eingriffe nach wie vor trotzdem von Nöten sein.
(Man denke nur an das neue "Bedanken-Skript", aufgrund der Beschränkungen und Struktur im Forum wohl kaum viel einfacher einzubauen...)


Da wäre ich auch schon bei der Idee, Xobor in Zukunft etwas plugin-fähig zu gestalten.
So in etwa, dass jemand seinen Code schreibt und dieser dann durch eine Schnittstelle anderen Xoborianern zur Verfügung gestellt werden könnte.
Der Entwickler setzt nur einen Haken "freigeben" bzw. verteilt ein ZIP-Archiv, das im Forum hochgeladen werden kann.
So in etwa, dann würde das alles mit "tue dies und das" wegfallen und auch unerfahrene Nutzer könnten so von komplexeren Plugins/Addons profitieren.

Wahrscheinlich ist Xobor da noch überhaupt nicht an so einer Umsetzung dran oder vielleicht auch gar nicht interessiert. (wg. Tarifen etc.)
Aber wenn du möchtest, könntest du das auch gerne mal vorschlagen.
Ansonsten bleiben wir einfach beim klassischen Prinzip, hat ja bisher auch soweit ganz gut funktioniert.


Freut mich außerdem, dass dir meine Arbeit gefällt.
Danke für das große Lob!
Dieses Foren-Verzeichnis scheint ja eine feine Sache zu sein.
Ich werde das mal im Auge behalten...


Gute N8!

Xobor Forum Software von Xobor
Einfach ein eigenes Forum erstellen
Datenschutz