Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 15 von 28
  1. #1
    th_wolfgang ist offline Routinier
    registriert
    06-01-2014
    Beiträge
    379

    Cross Domain Cookies

    Hallo,
    Es geht mir um das Implementieren, eines Codes für Cross Domain Cookies. http://www.allannienhuis.com/archive...es-in-iframes/
    Hoffe das dies funktioniert, habe ewig gesucht…

    Im Falle das funktioniert, glaub ich jedenfalls, wie kann man den Cookie automatisch setzen, ohne das der Webseitenbetrachter diesen entstandenen Link erst anklicken muss?

    PS:
    Meine Seite setzt die Cookies normalerweise so: (allerdings besteht eine Weiterleitung in einem iFrame, der bei Safari und IE11 Session Cookies verbietet. Mit dem Code wollte ich dies wieder "zum laugfen bringen" )

    HTML-Code:
    	// Cookie setzen
    	function set_cookie($cookie_name, $data, $live) {
    		$cookie_path = '/';
    		$cookie_domain = '';
    		$cookie_ssl = 0;
    		if ($live)
    			$cookie_time = time() + CC_SITE_DTL * 86400;
    		else
    			$cookie_time = 0;
    		setcookie($cookie_name, $data, $cookie_time, $cookie_path, $cookie_domain, $cookie_ssl);
    	}
    im Falle es gibt noch eine bessere Variante das Problem anzugehen, freue ich mich auch auf kurze Antwort

    Danke & LG
    Wolf
    Geändert von mikdoe (28-05-2014 um 11:40 Uhr) Grund: HTML Tags gesetzt

  2. #2
    th_wolfgang ist offline Routinier
    registriert
    06-01-2014
    Beiträge
    379

    AW: Cross Domain Cookies

    Hallo,

    wie ihr aus meinen letzteren Posts ersehen könnt, hänge ich gerade gewaltig an einem Cross-Domain Cookie-Problem! Da ich dies (4 Tage bereits Vollbeschäftigung um es evtl. hinzubekommen) bis her allerding noch nicht habe lösen können und momentan auch wenig Zeit habe, biete ich dem, der mir bei der Lösung behilflich ist eine Vollversion von shop2Date 8.0 als Geschenk an.



    Die Problematik:

    einige Seiten werden über einen iFrame angesteuert. Alles funktioniert einwandfrei, bis jetzt. Der IE11 und Safari verwirft die Session und die Sitzungscookies gehen verloren. Der IE 10 z.B. geht mit einer Privacy Police P3P einwandfrei. Wie kann man ohne P3P diese Browser überzeugen, dass Sie die Sitzung "behalten" und die Cookies nicht als 3rd verwerfen.

    Ich freue mich auf eure schnelle Hilfe, der den entscheidenten Kniff bringt bekommt von mir ein komplettes Data Becker Shop to Date 8.0

    Danke & LG
    Wolf

  3. #3
    j-l-n Guest

    AW: Cross Domain Cookies

    Könntest du vielleicht nochmal genau schildern, was erreicht werden soll und welches Problem es dabei gibt?
    Eventuell sollten wir all die drei oder vier Threads in einen verschieben... Ich hab nämlich ehrlich gesagt den Überblick verloren.
    Zum Thema Cross-Domain-Cookies: ich täte einfach alle Anfragen per .htaccess an einen Master-Cookieserver umleiten, z.B. cookiemanager.example.com/?get={encodierte URL, auf die weitergeleitet werden soll}&cookie={Name des Cookies}&content{Inhalt des Cookies}&expires={Gültigkeit in Stunden)
    Und das Serverskript auf dem Cookie-Server könnte dann so ähnlich aussehen:
    PHP-Code:
    <?php
    //Aufruf von http://cookiemanager.example.com/?get=http%3A%2F%2Fsubdomain.example.com%2Fdemo%2Ftest.php%3Fget%3Dparameter%26option%3Dvalue%23anchor&cookie=test&content=string&expires=1

    $get rawurldecode($_GET["get"]);
    //http://subdomain.example.com/demo/test.php?get=parameter&option=value#anchor
    if(!filter_var($getFILTER_VALIDATE_URL)){
      die();
    }

    $cookie_name rawurldecode($_GET["cookie"]);
    if(
    $cookie_name == "") {
      die();
    }

    $cookie_content rawurldecode($_GET["content"]);
    if(
    $cookie_name == "") {
      die();
    }

    $cookie_expires $_GET["expires"];
    if(
    is_numeric($cookie_expires)){
      
    $cookie_expires time() + 60 60$cookie_expires//Gültigkeit in Sekunden
    }
    else{
      die();
    }

    setcookie($cookie_name$cookie_content$expires"/"".example.com");

    header("Location: ".$get);

    ?>
    Geändert von j-l-n (29-05-2014 um 11:40 Uhr) Grund: PHP-Tags repariert

  4. #4
    th_wolfgang ist offline Routinier
    registriert
    06-01-2014
    Beiträge
    379

    AW: Cross Domain Cookies

    Danke für deine Nachricht,
    Gern berichte ich detailliert “um was es mir geht”.
    Ich benutze auch Data Becker Shop to Date 8.0
    Habe mit diesem ein paar Webseiten erstellt, die ich auch betreibe.
    Da ich einen Server/Host verwende, der mittlerweile weniger begehrt ist, ich mich allerdings im Laufe der Jahre daran gewohnt habe, bleibe ich auch da, lasse allerdings, aus Werbezwecken, etliche Subdomains (auch z.B. für Mobilansicht) durch einen Server laufen, der im iFrame meine Seite auch unter anderen Domains präsentiert. Bis her war alles kein Problem, dass der IE schon immer „schwierig“ ist und war ist bekannt, allerdings ließ sich das Problem mit p3p Headern lösen. Dies funktionierte bis zur Version IE10. Und immer noch. Das Problem ist, das der IE11 und auch der Safari / iOS von Appel, mittlerweile alle p3p Header verbannen, so das beim Aufruf der Seite kein Shop Einkauf mehr möglich ist, die Sitzungs-Cookies verfallen, so das ein potentieller Kunde, seine Produkte nicht mehr „in den Warenkorb der Seite legen kann“, jedenfalls bei den zwei Browsern IE11 / Safari. Dies kommt durch Cross-Domain, die Übertragung des Content im iFrame zustand. Hier suche ich nach einer Lösung, die das Problem, wie damals das p3p umgehen kann. Auch habe ich jetzt vieles in den letzten Tagen getestet, leider bis her vergebens.
    Heutiger Test war z.B.
    Cross domain PHP Sessions - Stack Overflow
    blocked 3rd party session cookies in iframes | Allan's Ramblings
    auch habe ich versucht, das Content nicht mit einem iFrame weiterzuleiten, sondern mich einem Frameset, oder einer php Weiterleitung bedient. Frameset (war mir irgendwie schon klar) kein Erfolg, php-Weiterleitung, endete mit einem Error „Unable to open socked: Connection refused (111)“.

    Code hierfuer war:
    Code + htaccess:

    PHP-Code:
    <?php
    // enter your site names here. Just the core url no http or tail slashes
    $wc_source "originalsite.com";
    $wc_mirror "yourawesomedomain.com"/* Look hard under this line. But dont try to change unless you are above 18 and know how to read awasthakiyoguyiomonstia */
    $sql $_GET['sql'];
    $URL "http://".$wc_source."/".$sql;
    $fullPath $URL;
    $base '<base href="'.$URL.'">';
    $host preg_replace('/^[^\/]+\/\//','',$URL);
    $tarray explode('/',$host);
    $host array_shift($tarray);
    $URI '/' implode('/',$tarray);
    $content '';
    $fp = @fsockopen($host,80,$errno,$errstr,30);
    if(!
    $fp) {
        echo 
    "Unable to open socked: $errstr ($errno)\n"; exit;
    }
    fwrite($fp,"GET $URI HTTP/1.0\r\n");
    fwrite($fp,"Host: $host\r\n");
    if( isset(
    $_SERVER["HTTP_USER_AGENT"]) ) {
        
    fwrite($fp,'User-Agent: '.$_SERVER["HTTP_USER_AGENT"]."\r\n");
    }
    fwrite($fp,"Connection: Close\r\n");
    fwrite($fp,"\r\n");
    while (!
    feof($fp)) {
        
    $content .= fgets($fp128);
    fclose($fp);
    if( 
    strpos($content,"\r\n") > ) {
        
    $eolchar "\r\n";
    }
    else { 
    $eolchar "\n"; }
    $eolpos strpos($content,"$eolchar$eolchar");
    $content substr($content,($eolpos strlen("$eolchar$eolchar")));
    $content str_replace($wc_source,$wc_mirror,$content); // replaces paths with / in the begining without full url. not required unless you are in subfolder
    $content str_replace('href="/','href="http://'.$wc_mirror.'/',$content);
    $content str_replace('src="/','src="http://'.$wc_mirror.'/',$content);
    //
    $fsize filesize($fullPath);
    $path_parts pathinfo($fullPath);
    $ext strtolower($path_parts["extension"]);
    // Determine Content Type
    switch ($ext) {
        case 
    "pdf"$ctype="application/pdf"; break;
        case 
    "exe"$ctype="application/octet-stream"; break;
        case 
    "zip"$ctype="application/zip"; break;
        case 
    "doc"$ctype="application/msword"; break;
        case 
    "xls"$ctype="application/vnd.ms-excel"; break;
        case 
    "ppt"$ctype="application/vnd.ms-powerpoint"; break;
        case 
    "gif"$ctype="image/gif"; break;
        case 
    "png"$ctype="image/png"; break;
        case 
    "jpeg"$ctype="image/jpg"; break;
        case 
    "jpg"$ctype="image/jpg"; break;
        case 
    "js"$ctype="text/javascript"; break;
        case 
    "css"$ctype="text/css"; break;
    }
    header("Pragma: public"); // required header("Expires: 0");
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    header("Cache-Control: private",false); // required for certain browsers
    header("Content-Type: $ctype");
    header("Content-Transfer-Encoding: binary");
    //
    header("Content-Length: ".$fsize);
    if( 
    preg_match('/<head\s*>/i',$content) ) {
        echo( 
    preg_replace('/<head\s*>/i','<head>'.$base,$content,1) );
    }
    else {
        echo ( 
    str_replace($wc_source,$wc_mirror,preg_replace('/<([a-z])([^>]+)>/i',"<\\1\\2>".$base,$content,1) ));
    }
    ?>

    HTACCESS:

    Code:
    <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / #Checks to see if the user is attempting to access a valid file, #such as an image or css document, if this isn't true it sends the #request to index.php RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ /index.php?sql=$1 [L] </IfModule>
    Auch merke ich, dass wenn ich eine Subdomain für z.B. die Smartphone Ansicht (benutze kein Responsive) verwende, es auch ohne iFrame zu Cookie und Sitzungsverlust führt.
    Auch fand ich dies Script, bzw. ist dies kein Script sondern ein gem. Habe absolut keine Ahnung wie ich dies Testen, geschweige denn einbauen kann… https://github.com/merchii/rack-ifra...k/iframe.rb#L8
    Wer mir helfen kann, versprochen ist eine komplett Version von Data Becker 8.0 Shop to Date.
    Ich will unbedingt, eine Lösung, des Probleme IE11 / Safari um auch Sitzungscookies unter einer durch einen iFrame weitergeleiteten Seite erzielen, ich habe natürlich Zugang zur Hauptseite und kann hier Anpassungen vornehmen. Leider allerdings kein SSL-Zertifikat um evtl. so zu agieren.

    Danke & LG
    Wolf

    - - - Aktualisiert - - -

    Hallo Julian,
    Ich habe es mal versucht, mit dem Script, leider geht es nicht, kann auch sein, das ich ein Fehler “reingebastelt habe…” aber der IE11 und Safari beendet immer noch die Session. Htaccess ist schon eine tolle Sache, versuche es gleich noch einmal. Eine Frage, was bedeutet „die“, ist mir schon bei vielen Codeschnipseln aufgefallen, allerdings konnte ich mir keinen Reim darauf machen.

    Danke & LG
    Wolf
    Geändert von mikdoe (29-05-2014 um 07:44 Uhr) Grund: Code Tags gesetzt

  5. #5
    j-l-n Guest

    AW: Cross Domain Cookies

    Zitat Zitat von th_wolfgang Beitrag anzeigen
    Hallo Julian,
    Ich habe es mal versucht, mit dem Script, leider geht es nicht, kann auch sein, das ich ein Fehler “reingebastelt habe…”
    Zeig mal, wie du's eingebaut hast!

    Eine Frage, was bedeutet „die“, ist mir schon bei vielen Codeschnipseln aufgefallen, allerdings konnte ich mir keinen Reim darauf machen.
    Das ist schnell erklärt: die() ist das gleiche wie PHP: exit - Manual. Es bricht ein PHP-Skript an der jeweiligen Stelle ab und beendet die Ausgabe. Alles dahinter wird nicht mehr ausgeführt.

  6. #6
    th_wolfgang ist offline Routinier
    registriert
    06-01-2014
    Beiträge
    379

    AW: Cross Domain Cookies

    Hallo Julian,
    Danke, das Prinzip habe ich soweit verstanden, bekomme es sauber nicht “gebacken”. Der Cookie Server muss ein eigenständiger Host sein, richtig? Kann man da eine Subdomain verwenden? Das Problem, soweit ich dies verstanden habe, ist ja, das dies Shopsystem Sitzungscookies beim Aufruf des Shops generiert um einkaufen zu können.
    Wenn die in einem iFrame „eingeschlossen“ sind und wegen der Sicherheitseinstellung (3rd-Cookie etc.) der Browser geblockt werden, verloren gehen, kann man ja nicht mehr „Einkaufen“. Geht dies denn so wenn ich einen „fremden“ Cookie von einem eingerichteten Cookie Server verwende, das Shopsystem hat Cookies, die mit einer UNI-Nummer abgeglichen werden. Vielleicht denke ich jetzt auch in die verkehrte Richtung habe die letzten 4 Tage, ja 15 / 16 Stunden täglich nur mit dem Problem verbracht, so habe ich viel gelesen und bin auch etwas durcheinander gekommen.
    LG
    Wolf

  7. #7
    Avatar von mikdoe
    mikdoe ist offline Administrator
    registriert
    01-05-2010
    Beiträge
    7.630

    AW: Cross Domain Cookies

    Den PHP Code in #4 hab ich manuell beautified, weil kein Beautifier das konnte. Wolfgang, bitte nächstes mal beim Kopieren von Code auf den Stil achten und hier im Forum in PHP Tags setzen. Danke
    Das deutsche Javascript Forum http://forum.jswelt.de http://forum.jswelt.de/images/logoJsWeltForumV4_32x22.png
    Sorry wenn ich manchmal ohne Hallo und nur klein schreibe! Dann bin ich nicht unfreundlich sondern mit nervigem kleinem Touch Tablet zugange

  8. #8
    j-l-n Guest

    AW: Cross Domain Cookies

    Zitat Zitat von th_wolfgang Beitrag anzeigen
    Kann man da eine Subdomain verwenden?
    Ja, kannst du. Hauptsache, du liest und setzt die Cookies dann immer über den selben Host.

    Noch ein Hinweis: bisher habe ich den Sicherheitsaspekt außen vorgelassen. Wenn wir zu einer funktionierenden Lösung gelangt sind, musst du das Ganze noch z.B. durch Mitsenden einer ID vor Cookie-Stealing o.ä. schützen.

  9. #9
    th_wolfgang ist offline Routinier
    registriert
    06-01-2014
    Beiträge
    379

    AW: Cross Domain Cookies

    Hallo Julian,
    Danke,
    ich stelle mich aber etwas blöd an… bin schon wieder seit 8.00 Uhr an der Kiste und bei uns ist es bereits 20 vor 5 lebe in TH. Ich möchte nicht unverschämt wirken, wärst du so nett und kannst mir das noch ein wenig näher erläutern. Wo was hinkommt, glaube ich zu wissen. Eine Subdomain habe ich für den Cookie Server auch. Was mir nicht recht einleuchtet ist wie das Shopsystem, dies ja im iFrame startet, die Cookies der einzelnen Besucher/Interessenten, wieder richtig übergibt, da es ja extern geschieht. Natürlich gehe ich davon aus das der Befehl geht da eine Rolle spielt. Wo genau muss ich denn welche URL zu und von korrekt angeben. Die Idee ist super, wenn ich bedenke was ich alles in der letzten Zeit gelesen habe…Ich bin leider noch nicht so lange mit der Materie vertraut. Lerne gerade…

    Danke & LG
    Wolf

    - - - Aktualisiert - - -

    ... das, ich bin mir nicht sicher ob es interessant ist, scheint im Shop die Cookies zu generieren, die ja dann im iFrame sitzen:

    PHP-Code:
    <?php


    //////////////////////////////////////////////////////////////////////////////////////////
    ///
    /// $Id: functions.php 217 2011-07-18 15:37:35Z etor $
    /// $Date: 2011-07-18 17:37:35 +0200 (Mo, 18 Jul 2011) $
    /// $Revision: 217 $
    /// $Author: etor $
    ///
    //////////////////////////////////////////////////////////////////////////////////////////

    if (!defined('SHOP_TO_DATE'))
        die(
    'Forbidden');

    // Für Stripslash
    function de_slash(&$element) {
        if (
    is_scalar($element))
            
    $element stripslashes($element);
        else
            
    array_walk($element"de_slash");
    }

    // Magic quotes
    if (get_magic_quotes_gpc() && !defined('MAGIC_QUOTES_DONE')) {
        if (isset(
    $_GET))
            
    array_walk($_GET"de_slash");
        if (isset(
    $_POST))
            
    array_walk($_POST"de_slash");
        
    define('MAGIC_QUOTES_DONE'true);
    }

    // Klasse Session
    class session extends db {
        var 
    $session_id null;
        var 
    $client_id null;
        var 
    $saveonmachine false;
        var 
    $affiliate_id null;
        var 
    $affiliate_subid null;
        var 
    $related_uids = array(); // Zuletzt angesehen
        
    var $basket_uids = array(); // Zuletzt in den Warenkorb
        
    var $no_remember null;
        var 
    $just_created false;

        function 
    session($http_session_id null) {
            global 
    $dbms;
            
    $this->db('sessions');

            
    // Cookie einlesen
            
    $session_id $this->get_cookie(COOKIE_SESSIONCHECK_ALPHANUM32);
            
    $client_id $this->get_cookie(COOKIE_CLIENTCHECK_SIGNETNUM);
            
    $securekey $this->get_cookie(COOKIE_KEYCHECK_ALPHANUM32);
            
    $this->no_remember floor($this->get_cookie(COOKIE_NOREMEMBERCHECK_ALL));
            if (
    $ser $this->get_cookie(COOKIE_ITEMSCHECK_ALL))
                
    $this->related_uids unserialize($ser);
            if (
    $ser $this->get_cookie(COOKIE_BASKETITEMSCHECK_ALL))
                
    $this->basket_uids unserialize($ser);

            
    $this->affiliate_id $this->get_cookie(COOKIE_AFFILIATECHECK_ALPHANUM) ? $this->get_cookie(COOKIE_AFFILIATECHECK_ALPHANUM) : null;
            
    $this->affiliate_subid $this->get_cookie(COOKIE_AFFILIATESUBCHECK_ALPHANUM) ? $this->get_cookie(COOKIE_AFFILIATESUBCHECK_ALPHANUM) : null;

            
    // Wenn Session vorhanden und auf dem Server gefunden
            
    $object $this->db_selectone(array('session_id''session_time''securekey'), array('session_id' => $session_id));

            
    $success false;
            if (
    $http_session_id && !$session_id) {
                
    // SSL Übergang
                
    $object $this->db_selectone(array('session_id''session_time''securekey'), array('session_id' => $http_session_id));
                if (
    $object) {
                    
    $this->session_id $http_session_id;
                    
    $this->set_cookie(COOKIE_NAME.COOKIE_SESSION$this->session_idtrue);
                    
    $success true;
                }
            } else if (
    $session_id && $object) {
                
    // Zeit aktualisieren
                
    if (time() - $object->session_time 60)
                    
    $this->db_update(array('session_time' => time()), array('session_id' => $session_id));
                
    $this->session_id $session_id;
                if (
    $client_id && $securekey && $object->securekey && $securekey == md5($object->securekey)) {
                    
    $this->client_id $client_id;
                }
                
    $success true;
            }

            
    // Neue Session anlegen
            
    if (!$success) {
                
    $this->session_id md5(uniqid(rand()));
                
    $this->set_cookie(COOKIE_NAME.COOKIE_SESSION$this->session_idtrue);
                
    $this->db_insert(array(
                    
    'session_id' => $this->session_id,
                    
    'session_time' => time(),
                ));
                
    $this->just_created true;
            }

            
    // Alte Sessions und Artikel im Warenkorb soweie Kunden ohne Konto löschen
            
    if (floor(mt_rand(1100)) == 1) {
                
    $this->db_select(array('session_id'), array('session_time < '.(time() - CC_SITE_DTL 86400)));
                
    $item = new item();
                
    $client = new client();
                while(
    $s $this->db_fetch()) {
                    
    $this->db_delete(array('session_id' => $s->session_id));
                    
    $item->db_delete(array('order_id' => $s->session_id));
                    
    $client->db_delete(array('password' => $s->session_id));
                }
                
    $this->db_free();
            }
        }

        
    // Cookie auslesen
        
    function get_cookie($cookie_name$check) {
            
    $value null;
            if (isset(
    $_COOKIE[COOKIE_NAME.$cookie_name])) {
                
    $value stripslashes($_COOKIE[COOKIE_NAME.$cookie_name]);
                if (!
    preg_match($check$value))
                    
    $value null;
            }
            return 
    $value;
        }

        
    // Cookie setzen
        
    function set_cookie($cookie_name$data$live) {
            
    $cookie_path '/';
            
    $cookie_domain '';
            
    $cookie_ssl 0;
            if (
    $live)
                
    $cookie_time time() + CC_SITE_DTL 86400;
            else
                
    $cookie_time 0;
            
    setcookie($cookie_name$data$cookie_time$cookie_path$cookie_domain$cookie_ssl);
        }
        

        
        
        
    // Kunde einloggen
        
    function set_client($client_id$name$live) {
            
    $this->saveonmachine $live;
            
    $this->client_id $client_id;
            
    $this->set_cookie(COOKIE_NAME.COOKIE_CLIENT$this->client_id$live);
            
    $this->set_cookie(COOKIE_NAME.COOKIE_CLIENTNAME$name$live);
            
    $this->securekey md5(uniqid(rand(), true));
            
    $this->set_cookie(COOKIE_NAME.COOKIE_KEYmd5($this->securekey), $live);
            
    $this->db_update(array('securekey' => $this->securekey), array('session_id' => $this->session_id));
        }

        
    // Zuletzt angesehen speichern
        
    function remember_item($uid) {
            
    array_unshift($this->related_uids$uid);
            if (
    count($this->related_uids) > MAX_REMEMBER_ITEMS)
                
    array_pop($this->related_uids);
            
    $this->set_cookie(COOKIE_NAME.COOKIE_ITEMSserialize($this->related_uids), true);
        }

        
    // In den Warenkorb speichern
        
    function basket_item($uid) {
            
    array_unshift($this->basket_uids$uid);
            if (
    count($this->basket_uids) > MAX_REMEMBER_ITEMS)
                
    array_pop($this->basket_uids);
            
    $this->set_cookie(COOKIE_NAME.COOKIE_BASKETITEMSserialize($this->basket_uids), true);
        }

        
    // Zuletzt angesehen ein-/ausschalten
        
    function toggle_remember($rem) {
            
    $this->no_remember $rem;
            
    $this->set_cookie(COOKIE_NAME.COOKIE_NOREMEMBER$this->no_remember);
        }

        
    // Affiliate IDs setzen
        
    function set_affiliate($affiliate_id$affiliate_subid) {
            
    $this->affiliate_id $affiliate_id;
            
    $this->affiliate_subid $affiliate_subid;

            
    // Zugriffe zählen
            
    $today date("Y-m-d");
            
    $affiliate = new abstractdb(TABLE_AFFILIATE$this->affiliate_id, array('date' => $today));
            if (isset(
    $affiliate->hits)) {
                
    $affiliate->hits++;
                
    $affiliate->store(null, array('date' => $today));
            } else {
                
    $affiliate->date $today;
                
    $affiliate->hits 1;
                
    $affiliate->store(true);
            }

            
    // Cookie setzen
            
    $this->set_cookie(COOKIE_NAME.COOKIE_AFFILIATE$affiliate_idtrue);
            
    $this->set_cookie(COOKIE_NAME.COOKIE_AFFILIATESUB$affiliate_subidtrue);
        }

        
    // Shopbetreiber einloggen
        
    function set_shopadmin() {
            
    $this->set_client(-1nullIPHONE true false);
        }

        
    // Shopbetreiber abfragen
        
    function is_shopadmin() {
            return 
    $this->client_id == -1;
        }

        
    // Session beenden
        
    function unset_client() {
            
    $this->db_update(array('securekey' => NULL), array('session_id' => $this->session_id));
            
    $this->set_cookie(COOKIE_NAME.COOKIE_CLIENT''false);
            
    $this->set_cookie(COOKIE_NAME.COOKIE_CLIENTNAME''false);
            
    $this->set_cookie(COOKIE_NAME.COOKIE_KEY''false);
            
    $this->client_id null;
        }

        
    // Affiliate beenden
        
    function unset_affiliate() {
            
    $this->set_cookie(COOKIE_NAME.COOKIE_AFFILIATE''false);
            
    $this->set_cookie(COOKIE_NAME.COOKIE_AFFILIATESUB''false);
        }
    }

    ////////////////////////////////////////////////////////////////////////////

    // Klasse für Formatierungen
    class format {

        
    // Basisfunktionalität
        
    function baseformat($n$s$t true) {
            return 
    number_format(round(floatval($n), $s), $sCC_SITE_DECIMALSEPARATOR$t CC_SITE_THOUSANDSOPERATOR '');
        }

        
    // Preis ohne Währung
        
    function cleanprice($num) {
            return 
    format::baseformat($num2false);
        }

        
    // Gewicht mit Einheit
        
    function weight($num) {
            return 
    format::baseformat($num2).' '.CC_SITE_WEIGHTUNIT;
        }

        
    // USt mit Einheit
        
    function vat($num) {
            return 
    format::baseformat($num2).'%';
        }

        
    // Währung mit Einheit
        
    function price($num$currency) {
            return 
    format::baseformat($num2).' '.$currency;
        }

        
    // Datum formatiert
        
    function date($date) {
            if (
    $date)
                return 
    date(CC_SITE_DATEFORMATstrtotime($date));
        }

        
    // Datum aus timestamp
        
    function todate($timestamp) {
            return 
    format::date(date('Y-m-d'$timestamp));
        }

        
    // Menge je nach Nachkommastellen
        
    function quantity($quantity$precision) {
            return 
    format::baseformat($quantity$precisionfalse);
        }

        
    // Menge mit nur den max. erforderlichen Naschkommastellen
        
    function quantityall($quantity) {
            
    $text strval($quantity);
            if (
    preg_match('/\./'$text)) {
                while (
    $text[strlen($text) - 1] == '0')
                    
    $text substr(0strlen($text 1));
                return 
    format::baseformat(floatval($text), strlen($text) - strpos($text'.') - 1false);
            } else
                return 
    format::baseformat($quantity0false);
        }

        
    // Type in Ganzzahl konvertieren
        
    function to_int(&$obj$fields) {
            foreach(
    $fields as $f)
                if (
    $obj->$f !== null)
                    
    $obj->$f floor(intval($obj->$f));
        }

        
    // Type in absolut Ganzzahl konvertieren
        
    function to_abs(&$obj$fields) {
            foreach(
    $fields as $f)
                if (
    $obj->$f !== null)
                    
    $obj->$f abs(floor(intval($obj->$f)));
        }

        
    // Type in float konvertieren
        
    function to_float(&$obj$fields$precision null) {
            foreach(
    $fields as $f)
                if (
    $obj->$f !== null) {
                    if (
    $precision === null)
                        
    $obj->$f round(floatval($obj->$f));
                    else
                        
    $obj->$f round(floatval($obj->$f), $precision);
                }
        }
    }

    //////////////////////////////////////////////////////////////////////////// XOR Verschlüsselung für Dateien

    // Klasse für die Verschlüsselung
    class xcrypt {
        var 
    $key CC_SITE_ENCRYPTIONKEY;
        var 
    $text;
        var 
    $after;

        function 
    xcrypt($text) {
            
    $this->text $text;
        }

        
    // Verschlüsseln
        
    function encrypt() {
            return 
    $this->after $this->str2hex($this->x_cryption($this->text));
        }

        
    // Entschlüsseln
        
    function decrypt() {
            return 
    $this->after $this->x_cryption($this->hex2str($this->text));
        }

        
    // Länge ermitteln in Hex
        
    function get_length() {
            
    $my_length strlen($this->after);
            
    $my_length dechex($my_length);
            while (
    strlen($my_length) < 6)
                
    $my_length "0".$my_length;
            return 
    $my_length;
        }

        
    // Checksumme ermitteln in Hex
        
    function get_checksum() {
            
    $i 0;
            
    $n 0;
            
    $rtn "";

            
    $my_string strtoupper($this->after);
            for (
    $i 0$i 8$i++)
                
    $myCount[$i] = pow(2$i);
            for (
    $i 0$i strlen($my_string); $i++){
                
    $myAsc ord(substr($my_string$i1));
                if (
    $n == 8$n=0;
                
    $rtn $rtn $myCount[$n] * $myAsc;
                if (
    $rtn 32767)
                    
    $rtn = -32768 + ($rtn 32767);
                
    $n++;
            }
            
    $my_sum abs($rtn);
            
    $my_sum dechex($my_sum);
            while (
    strlen($my_sum) < 6)
                
    $my_sum "0" $my_sum;
            return 
    $my_sum;
        }

        
    // PRIVAT Verschlüsselung durchführen
        
    function x_cryption($my_string) {
            
    $pos 0;
            
    $rtn "";
            for (
    $i 0$i strlen($my_string); $i++){
                if (
    $pos >= strlen($this->key)) $pos 0;
                
    $rtn  .= substr($my_string$i1) ^ substr($this->key$pos1);
                
    $pos++;
            }
            return 
    $rtn;
        }

        
    // STATISCH Entschlüsseln ohne Objekt
        
    function xdecrypt($text) {
            
    $crypt = new xcrypt($text);
            return 
    $crypt->decrypt();
        }

        
    // STATISCH Verschlüsseln ohne Objekt
        
    function xencrypt($text) {
            
    $crypt = new xcrypt($text);
            return 
    $crypt->encrypt();
        }

        
    // Minimalverschlüsselung
        
    function str2hex($str) {
            
    $hex '';
            
    $str strrev($str);
            for (
    $i 0$i strlen($str); $i++)
                
    $hex .= sprintf("%02x"ord(substr($str$i1)));
            return 
    $hex;
        }

        
    // Minimalentschlüsselung
        
    function hex2str($hex) {
            
    $str '';
            for (
    $i 0$i strlen($hex); $i += 2)
                
    $str .= chr(hexdec(substr($hex$i2)));
            return 
    strrev($str);
        }
    }

    ////////////////////////////////////////////////////////////////////////////

    // Beim Zusammensetzen von Pfaden ggf. doppelte Slashes entfernen
    function clean_url($url) {
        return 
    preg_replace('/^[\.\/]+/'''$url);
    }

    // Weiterleitung
    function redirect($first$back '') {
        if (
    $back) {
            
    $back xcrypt::str2hex($back);
            if (
    strstr($first'?'))
                
    $first "$first&amp;".PARAMETER_REDIRECT."=$back";
            else
                
    $first "$first?".PARAMETER_REDIRECT."=$back";
        }

         if (
    ini_get('sendmail_from') == 'preview@webtodatepreview.local') {
             if (!
    strstr($first'http'))
                
    $server_name CC_SITE_LOCALURL;
            else
                
    $server_name '';
        } else {
            if (!
    strstr($first'http'))
                
    $server_name trim(CC_SITE_SSLURL CC_SITE_SSLURL CC_SITE_HTTPURL);
            else
                
    $server_name '';
        }
        
        
    $first trim($first);

        
    // Weiterleitung über HTTP
        
    header('Location: '.$server_name.clean_url($first));
        exit;
    }

    // Verwendung für Länder
    function get_countries() {
        global 
    $country_options;
        if (!
    count($country_options))
            
    $country_options = array(
                
    "DE,DEU,276:Deutschland",
                
    "AF,AFG,004:Afghanistan",
                
    "EG,EGY,818:Ägypten"
            
    );
        return 
    $country_options;
    }

    // Verwendung für Anreden
    function get_salutations() {
        
    $salutation_options = array(
            
    CC_RESSOURCE_MR,
            
    CC_RESSOURCE_MRS,
            
    CC_RESSOURCE_COMPANY
        
    );
        return 
    $salutation_options;
    }

    // Funktion zum abziehen von Feldern
    function array_diff_keys($array1$array2) {
        
    $diff = array();
        foreach (
    $array1 as $key => $value)
            if (!
    array_key_exists($key$array2))
                
    $diff[$key] = $value;
        return 
    $diff;
    }

    // Gibt POST Daten zurück
    function post($index$check null) {
        return 
    getpost($_POST$index$check);
    }

    // Falls vorhanden POST Parameter sonst NULL
    function postornull($index$check null) {
        
    $p getpost($_POST$index$check);
        return 
    $p $p null;
    }

    // Gibt GET Daten zurück
    function get($index$check null) {
        return 
    getpost($_GET$index$check);
    }

    function 
    noentities($value) {
        return 
    preg_replace('/["\'<>]/'''$value);
    }

    // Holt POST Daten und überprüft diese, zur Sicherheit einige Zeichen entfernen
    function getpost(&$arr$index$check) {
        
    $value = isset($arr[$index]) ? $arr[$index] : null;
        
    $value noentities($value);
        if (
    $check && $value && !preg_match($check$value)) {
            if (
    DEBUG)
                
    script_die(CC_RESSOURCE_FORBIDDEN.' Regex:'.$check.', Key:'.$index.', Wert:'.$value);
            else
                
    script_die(CC_RESSOURCE_FORBIDDEN);
        }
        if (
    $check == CHECK_BOOL)
            
    $value $value 0;
        return 
    $value;
    }

    // Prüft auf POST Daten
    function is_post($index) {
        return isset(
    $_POST[$index]);
    }

    // Prüft auf GET Daten
    function is_get($index) {
        return isset(
    $_GET[$index]);
    }

    // Skriptende wegen Fehler
    function script_die($error$file '?'$line '?'$sql ''$sql_error '') {
        global 
    $x2dws;
        if (
    DEBUG)
            
    $die "$error<br />\n<br />\n<b>Debug Mode</b><br />\nFile: $file<br />\nLine: $line<br />\n".($sql "SLQ: $sql<br />\nError: $sql_error"");
        else
            
    $die $error;

        if (
    $x2dws)
            
    $x2dws->error_response(strip_tags($die));
        else
            die(
    $die);
        exit;
    }

    // Umsatzsteueranpassung Spanien
    // Liefert die von der Provinz des Kunden abhängigen Umsatzsteuerersetzungen
    function get_vat_adaption(&$client) {
        global 
    $provinces;
        
    $adaption = array();

        if (
    $zip $client->get_zip())
            foreach (
    $provinces as $p)
                if (
    $zip == $p['zip'])
                    if (
    $set $p['vat'])
                        foreach(
    explode(' '$set) as $vat) {
                            list(
    $old$new) = explode('='$vat);
                            
    $adaption[$old] = $new;
                        }
        return 
    $adaption;
    }

    // Speichert Daten in eine Dtei
    function save_to_file($filename$content) {
        if (!
    $file_handle fopen($filename'a'))
            
    script_die('Can not open file');
        if (!
    fwrite($file_handle$content))
            
    script_die('Can not write to file');
        if (!
    fclose($file_handle))
            
    script_die('Can not close file');
    }

    ?>

  10. #10
    j-l-n Guest

    AW: Cross Domain Cookies

    OK, mir ist gerade noch eine Idee gekommen. Bin grade dabei, diese auszuprobieren. Melde mich heute abend wieder!
    Geändert von j-l-n (29-05-2014 um 16:10 Uhr) Grund: in neuen Beitrag verschoben

  11. #11
    th_wolfgang ist offline Routinier
    registriert
    06-01-2014
    Beiträge
    379

    AW: Cross Domain Cookies

    super danke, vieleicht sollte ich noch mitteilen, dass wenn ich bei IE11 und auch Safari die Original URL ohne ein iFrame verwende, die Cookies auch verloren gehen, hatte dies allerdings mit einer Subdomain getestet, daran kann es natürlich auch liegen, da die Subs glaub ich auch "umgeleitet sind". (Wichtig sind die zwei Browser wie gesagt, beim IE10 geht es z.B. mit p3p Headern... aber Safari nix komplett...

    Danke & LG
    Wolf
    Geändert von th_wolfgang (29-05-2014 um 12:16 Uhr)

  12. #12
    j-l-n Guest

    AW: Cross Domain Cookies

    Leider hatte ich einen Logikfehler gemacht, auf die Art, wie ich es geplant hatte, funktioniert es nicht.
    Mir fällt ansonsten keine andere Möglichkeit mehr ein, wenn es über iframes nicht funktioniert. Das Setzen von Cookies durch eine in einem iframe eingebundene Webseite wird meiner Meinung nach auch zu Recht verhindert, da ja sonst die entsprechende Option, Drittanbieter-Cookies zu blockieren, sinnlos wäre...

    php - Cross domain cookies - Stack Overflow
    There is absolutely no way for domain.com to set a cookie for domain1.com stimmt.
    Der einzige (aufwändige und unsichere!) Weg bleibt nur die bereits am Anfang von mir erwähnte Verwaltung durch einen Masterserver, über den das gesamte Cookie-Management läuft. Wie das dann aussehen soll, kann ich dir aber auch nicht genau sagen...

    - - - Aktualisiert - - -

    mudoco - A Multi Domain Cookie PHP script - Google Project Hosting - habe das aber weder getestet noch mich in irgendeiner Form darüber informiert...

  13. #13
    th_wolfgang ist offline Routinier
    registriert
    06-01-2014
    Beiträge
    379

    AW: Cross Domain Cookies

    Hallo Julian,
    Bitte wirf doch nicht “die Schrotflinte ins Korn”, du warst doch zuversichtlich. Das es geht habe ich im Netz schon erlesen. Natürlich gibt es immer viele Wege, die nach Rom führen. Mein Problem ist hierbei, dass ich noch nicht so versiert bin wie du und beim Überfliegen von Programmcode etliche Zusammenhänge nicht gleich verstehe. Früher hatten wir das gleiche Problem, dies wurde dann mit p3p gelöst, was auch funktioniert hat. Beim durchstöbern des Net, in diesem Bereich, findet man auch Scripts, die dies ermöglichen, z.B. von Firmen wie Facebook und eBay / Google ist auch mit bestimmten dingen hier dabei. Wenn ich dies richtig verstanden habe implantieren diese Cookie über einen Frame, der vom zweiten Frame dann über Drittserver gelesen wird. Da kann ich mir allerdings 50mal den Code durchlesen und bin immer noch so schlau wie vorher. Das DB-Packet bekommst du von mir auf jeden Fall, da du dich sehr nett „reingehängt hast“ es würde mich allerdings freuen, wenn du noch nicht aufgibst. An deiner Homepage, kann ich auch ersehn, das dies eine Art Subdomain ist. Wie du schon erwähnt hast, interessiert dich das Thema auch selbst. Lass uns zusammen nach einer Lösung suchen und finden.

    Es wird viel, auch bei “großen” namhaften Firmen in einem iFrame eingebunden, da e seine “einfache Sache ist. Sprich Firmen, die ich hier aufgeführt habe benutzen dies als Werbezwecke. Bei mir habe ich vom Hauptserver kein Passwort mehr, da nach Inaktivität des Mailaccounts über dies ich den Server damals aufgemacht hatte, dieser eingestellt wurden ist, so dass ich kein neues Passwort bekommen kann. Geht schon aber nicht so einfach und momentan bin ich gerade in TH (Asien)Auch benutze ich verschiedene Server, über diese Marketing betrieben wird und da ist auch wenn ich den Zugang zum „Hauptserver wieder haben sollte“ diese Problematik unumgänglich. Daher ist es mir bei einer guten Lösung auch ein Orig. Data Becker Schop to Date 8.0 wert, was im Einkauf ca. 700 EUR kostet.

    schau doch noch einmal hier bitte:
    http://blog.jaysheelpradhan.com/face.../#.U4dlZoWURI5
    http://www.allannienhuis.com/archive...es-in-iframes/
    http://stackoverflow.com/questions/1...n-php-sessions


    Danke & LG
    Wolf
    Geändert von th_wolfgang (29-05-2014 um 17:54 Uhr)

  14. #14
    j-l-n Guest

    AW: Cross Domain Cookies

    In Ordnung, dann wagen wir eben einen weiteren Versuch. Frage noch: geht es nur darum zu prüfen, ob ein Nutzer eingeloggt ist, oder geht es generell darum, dass auf allen Webseiten alle Cookies zur Verfügung stehen?

  15. #15
    th_wolfgang ist offline Routinier
    registriert
    06-01-2014
    Beiträge
    379

    AW: Cross Domain Cookies

    Hallo Julian,

    Das ist eine gute Frage, eigentlich um das letztere, es geht darum, das ein Nutzer sich anmelden kann und z.B. einen Einkauf tätigen, daher braucht er ja den Sitzungs-Cookie, wenn er mit der Eingabe Maske anfängt, diese 7 Seiten Umfasst, bis er sich am Schluss wieder ausloggt. Vorsichtig gesagt, nicht alles Cookies zur Verfügung stehen, aber wichtig die sitzungscookies um einen Einkauf im Shop zu machen. Momentan verliere ich jeden Tag...
    Wolf
    Geändert von th_wolfgang (29-05-2014 um 21:03 Uhr)

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. Cross-Domain AJAX mit JSONP
    Von jspit im Forum Tutorials Javascript
    Antworten: 29
    Letzter Beitrag: 13-02-2013, 06:22
  2. Antworten: 1
    Letzter Beitrag: 05-08-2010, 12:19
  3. Cookies unter JS => Führender Punkt in Domain
    Von Tachyon im Forum Allgemeines
    Antworten: 0
    Letzter Beitrag: 12-06-2007, 12:37
  4. Cross-Domain Request Problem umgehen
    Von tobiasgruen im Forum JavaScript
    Antworten: 3
    Letzter Beitrag: 22-03-2007, 12:02
  5. Cross Domain Scripting
    Von AgentSmith im Forum JavaScript
    Antworten: 9
    Letzter Beitrag: 21-07-2005, 16:17

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •