Announcement

Collapse
No announcement yet.

Session Id übergeben

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Session Id übergeben

    Hallo zusammen,

    ich habe folgendes Problem mit der Behandlung einer Session.
    So sieht das Szenario aus:

    In unserem E-Shop wird als Zahlungssystem die SaferPay Plattform angeboten.
    Aktuell ist die Vorgehensweise bei einem Zahlungsvorgang so, dass bei einer Zahlung die SaferPay Seite geöffnet wird und nachdem der Kunde die Zahlung erfolgreich abgeschlossen hat, zurück auf die E-Shop Seite gelinkt wird.

    Hierbei ist entscheidend, dass der Client-Browser den "Success-Link" aufruft und es somit keine Schwierigkeiten mit der Session gibt.

    Jetzt gibt es leider bei uns das Problem, dass die Kunden oft zu schnell die Seite schließen und dadurch nicht der Success Link aufgerufen wird, was dazu führt, dass die Bestellung nicht erfolgreich bei uns eintrifft.

    Nach Rücksprache mit SaferPay gibt es hier eine elegantere Lösung die so aussieht, dass der SaferPay Server nach erfolgreicher Zahlung die Bestätigung in unser E-Shop senden kann.

    Dies realisiert SaferPay mit einem HTTP POST Request.

    Damit dies aber richtig funktionieren kann, muss SaferPay aber die Session aus unserem E-Shop System mitgeteilt bekommen.

    Und hier stehe ich aktuell vor dem Problem, wie ich dies richtig hinbekomme.

    Wir arbeiten im E-Shop mit Cookies, also nicht cookieless.

    Hat vielleicht jemand einen Rat für mich, wie ich dies bewerkstelligen kann, dass ein fremdes System in eine vorhandene Session eingreifen kann.

    Dafür wäre ich sehr dankbar.

    Gruß
    Pierre

  • #2
    Warum nicht

    Aufruf des Shopsystems im Hintergrund (NOTIFYURL)

    Lt. deren Infos funktioniert das nur im Kunden Browser. Der ist nach deinen Aussagen jedoch schon futsch. Des Weiteren dürfte es IMHO wohl nicht möglich sein, die Session an einen anderen Server weiter zu geben. Was sollte er damit machen? Der andere Server "weiss" nicht was in der Session drin ist; könnte auf die Daten gar nicht zugreifen. Des Weiteren wäre das auch datenschutzrechtlich bedenklich
    Christian

    Comment


    • #3
      Hallo Christian,

      danke für die Antwort.

      Ich habe mir das eben mal mit dem Wireshark angeschaut.
      Es ist auf jeden Fall so, dass beim NOTIFYURL der SaferPay Server ein HTTP POST sendet, mit dem Link wie ich den im Codebehind definiert habe.

      Also wird NOTIFYURL nicht vom Client-Browser gesendet.

      Aber NOTIFYURL ist schon meine favorisierte Lösung.
      Ich hatte mir das so vorgestellt, dass ich SaferPay die Session ID via QueryString übergebe.

      Also etwa so:

      Code:
      opi.SetAttribute("NOTIFYURL") = CreateSelfUrl("thankyou.aspx?SessionID" & Session.SessionID
      SaferPay soll die Session ID quasi nur durchschleifen, damit die Verarbeitung funktioniert, die in thankyou.aspx passiert.


      Gruß
      Pierre

      Comment


      • #4
        Also wird NOTIFYURL nicht vom Client-Browser gesendet.
        Sicher, steht doch so bei denen da.....

        Ich hatte mir das so vorgestellt, dass ich SaferPay die Session ID via QueryString übergebe.
        Halte ich nicht für zielführend. Besser wäre es ein Merkmal zu übergeben, welches den Nutzer identifiziert. Wenn die Session auf dem Server nicht mehr existiert, dann kann eine Zuordung nicht mehr erfolgen.

        Könnte mir das so vorstellen:

        Anwender macht Bestellung fertig
        Daten werden in DB gespeichert
        eine ID wird dabei vergeben
        externer Zahlungsprozess wird angestossen
        die vergebene ID wird dabei übergeben
        der externe Zahlungsprozess gibt ein Success unter Nutzung der ID zurück
        Bestelldaten werden weiter verarbeitet
        Kommt innerhalb X Tagen/Stunden kein Success werden die Bestelldaten gelöscht
        Christian

        Comment


        • #5
          Sorry hatte es eben so verstanden, dass du meinst, das NOTIFYURL über den Client Browser gesendet wird.

          Nun der Shop ist so aufgebaut, dass in der thankyou.aspx auf Sessionvariablen zurückgegriffen wird, die in vorherigen Seiten initialisiert wurden.

          Daher komme ich denke ich nicht an die Session ID vorbei??

          Ich stelle mir das so vor, dass wenn die Seite aufgerufen wird, im Page Load der Wert Session ID mittels Request.QueryString ausgelesen wird und dieser Wert als Session gesetzt wird.
          Wie würde man eine Session ID zuweisen?

          Sorry wenn die Frage vielleicht dämlich klingt

          Gruß
          Pierre

          Comment


          • #6
            Ich habe es rausbekommen.

            Falls es jemanden interessiert:

            Der Trick hierbei ist, dass ein Custom SessionIDManager erzeugt werden muss.
            Ich habe mir dazu eine neue Klasse erstellt, die von SessionIDManager erbt.

            In der Klasse habe ich dann die Funktion CreateSessionID überschrieben.

            Zusätzlich habe ich noch eine Property hinzugefügt, die einen RequestParameter (SessionID) ausliest, sofern vorhanden.

            Damit das ganze noch funktioniert, muss der web.config diesen SessionIDManager Type noch bekannt gemacht werden.

            Hier der Ausschnitt:

            Code:
            Public Class MySessionIDManager
                Inherits SessionIDManager
            
            
                Public Overrides Function CreateSessionID(ByVal context As HttpContext) As String
                    Dim id As String = Nothing
                    id = SessionID
                    If id Is Nothing Then
                        id = MyBase.CreateSessionID(context)
                    End If
            
                    Return id
                End Function
            
              Public ReadOnly Property SessionID() As String
                    Get
                        Dim mySessionID As String = HttpContext.Current.Request.QueryString("SessionID")
                        Return mySessionID
                    End Get
                End Property
            Und in der web.config

            Code:
            <sessionState mode="StateServer" sessionIDManagerType="<Namespace>.MySessionIDManager" ... >
            Viele Grüße
            Pierre

            Comment

            Working...
            X