Neuigkeiten
  • Die modified eCommerce Shopsoftware ist kostenlos, aber nicht umsonst.
    Spenden
  • Damit wir die modified eCommerce Shopsoftware auch zukünftig kostenlos anbieten können:
    Spenden
  • Thema: Session Tracking bei zugriffen über Ajax/jQuery

    netfox

    • Neu im Forum
    • Beiträge: 4
    Session Tracking bei zugriffen über Ajax/jQuery
    am: 24. Dezember 2016, 14:43:19
    Hallo,

    ich weis, es ist nicht die feine Art, als neues Mitglied direkt mit einer Frage aufzufallen, bitte entschuldigt das, aber ich Programmiere seit 2011 mit modified und war immer ein braver stiller Leser hier im Forum. Hinzu ist Heiligabend und das Thema sollte für uns alle derzeit die nidrigste Priorität besitzen  :-o

    Also, folgende Problemstellung:
    Ich habe mr eine Datei angelegt, die Produkte (übergabe Quantity und products_id via GET) in den Warenkorb legt. Hintergrund ist, das die Datei via jQuery aufgerufen wird und somit die Artikel und neuladen der Seite in den Warenkorb gelangen.

    addtocart.php
    Code: PHP  [Auswählen]
    <?php
    // Add Products to Cart, called by GET for jQuery / Ajax
                         
    include ('includes/application_top.php');  

    $products_id = (int)$_GET['products_id'];
    $quantity = (float)$_GET['products_qty'];

    // Produkt bereits im Warenkorb?
    if ($_SESSION['cart']->in_cart($products_id)) {
      // Ja, Menge addieren
      $quantity = (float)$_SESSION['cart']->contents[$products_id]['qty'] + $quantity;
    }

    // In den Cart einfügen
    $_SESSION['cart']->add_cart($products_id,$quantity);  
    // Cart neu berechnen
    $_SESSION['cart']->calculate();

    // Rückgabe String für JS Function
    $total = $_SESSION['cart']->show_total();
    $pcount = count($_SESSION['cart']->contents);
    echo 'Ihr Warenkorb enth&auml;lt:<span>'.$pcount.' Produkte: '.$xtPrice->xtcFormat($total, true).'</span>';
    exit;
    ?>
     

    Die Datei wird wie folgt aufgerufen:
    addtocart.php?products_id=ID&products_qty=MENGE

    Es funktioiniert auch sehr sehr gut, nun habe ich nur das Problem, das bei einigen Browsern eine neue Session für den Aufruf durch Ajax / jQuery angelegt wird. Somit existieren für den einzelnen Anwender aufeinmal 2 Sessions und somit auch 2 Warenkörbe, welche auch gepflegt werden!?

    Wie kann ich es vermeiden, dass dieser Fall eintritt? Habe auch bereits probiert die ModSid im GET mit zu übergeben, aber kein gelingen.

    Mein jquery Script setzt die URL und den Aufruf wie folgt zusammen:
    Code: Javascript  [Auswählen]
    $.get( "addtocart.php", { products_id: productsid, products_qty: quantity.toFixed(2) } ).done(function( data ) { alert('done'); });
     

    Der Fehler tritt insbesondere beim Android Standart Browser auf!?
    Achja, wenn das Script fertig ich, werde ich es natürlich hier mitveröffentlichen als kleines Dankeschön für die Hilfe  :-)
    Ach und nochmal Ja: ICH WEIS DAS DIE Products_QTY eigentlich ein integer ist, habe aber das bestehende System soweit angepasst, dass auch Floats möglich sind, da der betroffende Shop auch Zuschnittsware (Meter, Centimeter) anbietet.

    Vielen Dank für eure Hilfe.

    Matze

    Linkback: https://www.modified-shop.org/forum/index.php?topic=36264.0

    hpzeller

    • Experte
    • Beiträge: 4.129
    • Geschlecht:
    Re: Session Tracking bei zugriffen über Ajax/jQuery
    Antwort #1 am: 25. Dezember 2016, 11:12:05
    Hallo Matze,

    ich nehme an Du speicherst die Session in der Datenbank.
    Vorschlag: Teste mal ob das Problem auch besteht, wenn Du die Session in einer Datei speicherst.

    Vorgehen:
    Im Admin musst Du unter 'Erweiterte Konfiguration' -> 'Sessions' -> 'Session Speicherort' ein Verzeichnis mit absoluter Pfadangabe eintragen auf das Du Zugriff hast und dieses mit Schreibrechten für PHP bzw. den Webserver ausstatten, ich empfehle dir das "log" Verzeichnis dazu zu verwenden, denn dieses Verzeichnis besitzt bereits die nötigen Schreibrechte und ist für das Web gesperrt, den absoluten Pfad dorthin findest Du in der 'includes/configure.php' beim Wert define('DIR_FS_DOCUMENT_ROOT', '....' , welchen du noch um das Verzeichnis 'log/' erweitern musst.

    Dann in der 'includes/configure.php' folgende Zeile

    Code: PHP  [Auswählen]
      defined('STORE_SESSIONS') or define('STORE_SESSIONS', 'mysql'); // leave empty '' for default handler or set to 'mysql'

    mit dieser ersetzen.

    Code: PHP  [Auswählen]
      defined('STORE_SESSIONS') or define('STORE_SESSIONS', ''); // leave empty '' for default handler or set to 'mysql'

    Gruss
    Hanspeter

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.990
    • Geschlecht:
    Re: Session Tracking bei zugriffen über Ajax/jQuery
    Antwort #2 am: 25. Dezember 2016, 13:37:52
    2 Sessions im selben Browser halte ich für unmöglich.
    Wenn überhaupt wird die erste Session ge-cancelled und eine neue definiert.
    Kann man auch leicht feststellen indem man das was du machst eingeloggt macht und müsste, wenn das mit der neuen Session stimmt, eigtl. ausgeloggt werden.
    Ohne genauere Einblicke in deine Entwicklung wird es schwer ansonsten Tipps zu geben.
    Ich würde es mal mit POST anstelle von GET versuchen und die Session-ID mit als POST-Wert übertragen.

    Gruß,
    noRiddle

    ShopNix

    • Viel Schreiber
    • Beiträge: 1.208
    Re: Session Tracking bei zugriffen über Ajax/jQuery
    Antwort #3 am: 27. Dezember 2016, 12:32:35
    ...
    Es funktioiniert auch sehr sehr gut, nun habe ich nur das Problem, das bei einigen Browsern eine neue Session für den Aufruf durch Ajax / jQuery angelegt wird. Somit existieren für den einzelnen Anwender aufeinmal 2 Sessions und somit auch 2 Warenkörbe, welche auch gepflegt werden!?

    Wie kann ich es vermeiden, dass dieser Fall eintritt? Habe auch bereits probiert die ModSid im GET mit zu übergeben, aber kein gelingen.
    ...

    Nach meinem Verständnis liegt Dein Problem darin, dass Du ein Programm unter Umgehung des Session-Handlings direkt aufrufst.  Das liegt sicher nicht am Browser.

    Wenn Du Session-Daten brauchst, müsstest Du das entsprechende Snippet aus application_top in die aufgerufene Routine so einbauen, dass sie beim Aufruf per AJAX greift und die vorhandene Session verwendet.

    netfox

    • Neu im Forum
    • Beiträge: 4
    Re: Session Tracking bei zugriffen über Ajax/jQuery
    Antwort #4 am: 30. Dezember 2016, 17:43:58
    Hallo @all,

    so, bin wieder zurück aus den Feiertagen ... und habe dank der Hinweise die Lösung gefunden :-)

    @hpzeller: Habe ich leider noch nicht getestet, da es anders mit POST übergabe funktioniert

    @NoRiddle: Ja, es gab 2 Sessionen, aber das kann unterbunden werden, wenn der jQuery aufruf mit POST und Session ID übergabe durchgeführt wird.
     :thx:

    @ShopNix: Am Anfang wird per
    Code: PHP  [Auswählen]
    include ('includes/application_top.php');
    alles nötige zum Session Tracking eingeladen, aber trotzdem danke für den Denkanstoß

    @all
    So, funktioniert jetzt dank übertragung per POST!

    @moderator
    Thema erledigt  :thumbs:

    Viele Grüße

    Matze

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.990
    • Geschlecht:
    Re: Session Tracking bei zugriffen über Ajax/jQuery
    Antwort #5 am: 30. Dezember 2016, 18:43:05
    "Thema erledigt" kannst du selbst machen (schwarzer Button unten).

    Gruß,
    noRiddle
    16 Antworten
    8307 Aufrufe
    26. August 2012, 17:01:16 von mhbosch
    8 Antworten
    7709 Aufrufe
    24. Februar 2015, 14:51:39 von Hajo11
    3 Antworten
    3017 Aufrufe
    24. Januar 2012, 11:47:43 von abstractizm
    8 Antworten
    8211 Aufrufe
    03. Januar 2011, 09:33:51 von armandogarcia