Applikationsdaten in Cookie sichern

BusinessServerPages; Erstellung von Webapplikationen.

Applikationsdaten in Cookie sichern

Postby Enrico4983 » Mon Oct 20, 2003 3:21 pm

Hi,

hat jemand ne Idee wie ich folgendes am besten anstellen könnte? Bei unserer BSP-Applikation gibt es hier und da Abbrüche, bei denen wir nicht genau wissen warum und weshalb diese passieren! Nun würden wir gerne dem Anwender die bis dato eingegebenen Daten wieder zur Verfügung stellen. Die Applikation läuft im stateful-Mode. Meine Idee wäre nun gewesen die Attribute der Applikationsklasse auszulesen und in ein Cookie zu schreiben. Die Attribute und ihre Inhalte kann man ganz einfach zur Laufzeit ermitteln, soll ja dynamisch sein das ganze *g* Problem sind die Tabellen, also wenn ein Attribut eine Tabelle ist.

Zuerst dachte ich, ich mach einfach nen String und klopf da alles rein und mit nem Index davor kann ich das ganze wieder zurückschreiben. Tja, nur sobald in der Tabelle ne gepackte Zahl oder ein String enthalten ist klappt das nicht mehr!

Hat jemand ne Idee?

Gruß
Troopy
Enrico4983
..
..
 
Posts: 39
Joined: Mon Aug 04, 2003 3:54 pm

Postby Knud3847 » Tue Oct 21, 2003 1:50 pm

Tach,

schau Dir mal die BSP-Applikation IT00 an und da speziell die Seite 'misc_page_persistence.htm'. Da findest Du ein Beispiel, wie Server-side cookies genutzt werden um Daten abzulegen.
hier ein Auszug:

Code: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
  1.   DATA: page_data TYPE XSTRING.
  2.   DATA: name TYPE STRING.
  3.  
  4. * User Management can be using normal ABAP sy-name or other technique.
  5.   name = sy-uname.
  6.  
  7. * Persist new data into page data
  8.   EXPORT last_string_added FROM last_string_added
  9.          strings           FROM strings
  10.          TO DATA BUFFER page_data.
  11.  
  12. * Save server side cookie
  13.   CALL METHOD CL_BSP_SERVER_SIDE_COOKIE=>SET_SERVER_COOKIE
  14.     EXPORTING
  15.       NAME                  = 'my_page_data'
  16.       APPLICATION_NAME      = runtime->application_name
  17.       APPLICATION_NAMESPACE = runtime->application_namespace
  18.       USERNAME              = name
  19.       SESSION_ID            = 'same_for_all'
  20.       DATA_NAME             = 'page_data'
  21.       DATA_VALUE            = page_data
  22.       EXPIRY_TIME_REL       = 3600
  23.   .
  24.  
  25.  
GeSHi ©

Denke mal, das hilft Dir weiter. In dem Fall musst Du natürlich auch einen Client-seitigen cookie mit der session_id ablegen, damit Du die Verbindung zwischen client und server-cookie nach einem Abbruch wieder hinbekommst.

Ciao, R2D2 :-)
Knud3847
..
..
 
Posts: 10
Joined: Wed Aug 06, 2003 4:34 pm

Postby Enrico4983 » Tue Oct 21, 2003 6:17 pm

Wie ich mit Cookies arbeiten kann ist mir schon bekannt... mein Problem stellen die internen Tabellen dar. Ich will ja nicht 40 Cookies für jeden User anlegen und dann wieder zusammenbasteln... nein Danke!

Da muss es eine andere Lösung geben!

mfg
Troopy
Enrico4983
..
..
 
Posts: 39
Joined: Mon Aug 04, 2003 3:54 pm

Postby Alva1590 » Wed Oct 29, 2003 11:18 am

Wenn du wirklich 40 Tabellen für jeden User brauchst, dann bleibt dir nichts anderes übrig als auch 40 Tabellen zu verwalten. Zur Erleichterung könntest du aber z.B. eine Riesen-Tabelle für die Inhalte der Tabellen anlegen die du zusammenbaust bzw. wieder auseinanderbaust oder du baust dir einen FUBA/Include der das Schreiben und Lesen der 40 Tabellen für dich macht.
Alva1590
.....
.....
 
Posts: 4387
Joined: Mon Dec 02, 2002 3:01 pm

Postby Enrico4983 » Fri Oct 31, 2003 8:55 am

Am liebsten hätte ich 1 Tabelle definiert, innerhalb derer ich wieder beliebige Tabellen abspeichern kann... geht aber wohl nicht...

jetzt arbeite ich halt mit dem Namen des Attributs, einem Index und eine String! Allerdings bin ich noch nicht dazugekommen zu testen ob es auch wieder korrekt zurückgeschrieben wird. Das schwierige dabei sind non-characterlike-structures und deep-structures, die relativ aufwändig zerpflückt werden müssen!

Greetz
Troopy
Enrico4983
..
..
 
Posts: 39
Joined: Mon Aug 04, 2003 3:54 pm

Postby Enrico4983 » Mon Nov 10, 2003 7:35 pm

Hi,

so hab das Ding jetzt soweit glaub hinbekommen. Die weggeschriebene Tabelle ist natürlich recht groß. Wenn ich mir dann die Cookies anzeigen lasse, dann gibt es für jedes Cookie mehrere Einträge. Weiß jemand zufällig wie groß das Cookie für einen einzigen Eintrag max. sein darf?

Gruß
Troopy
Enrico4983
..
..
 
Posts: 39
Joined: Mon Aug 04, 2003 3:54 pm

Postby Alva1590 » Wed Nov 12, 2003 11:25 am

imho: Kann ein Server max. 20 cookies zu max. 4KB ablegen.

Ich will ja jetzt nicht meckern oder blöd werden, aber ich glaub irgendwas machst du falsch wenn du für jeden user 40 Tabellen brauchst. darf man fragen was du gerade realisierst?!?
Alva1590
.....
.....
 
Posts: 4387
Joined: Mon Dec 02, 2002 3:01 pm

Postby Enrico4983 » Wed Nov 12, 2003 8:50 pm

Wir haben eine recht große Applikation. Diese schmiert jedoch aus unerklärlichen Gründen hier und da ab... dann ist es ärgerlich wenn alle Daten weg sind. Nach jeder Seite gleich alles in die DB zu schreiben geht auch nicht, also wäre dann alles weg. Da können gut mal 60 Minuten Arbeit umsonst gewesen sein. Also muss eine Lösung her die Daten irgendwie zwischenzuspeichern --> Cookie! Es muss also alles weggeschrieben werden um die Applikation an der Stelle fortzusetzen an der sie abgebrochen ist --> alle Attribute der Applikationsklasse wegschreiben. Da diese sich ja jederzeit ändern können usw. sollte das ganze so dynamisch sein, dass an der Methode nichts mehr angefasst werden muss. Das Problem dabei stellen vor allem Tabellenattribute dar, da diese oft eine non-characterlike-structure bzw. eine deep-structure enthalten und somit nicht einfach in ein Characterfeld geschreiben werden können! Also werden diese Feld für Feld zerpflückt, entsprechend konvertiert falls nötig und in das Feld des Cookies geschrieben. Im Cookie selbst steht jetzt EINE Tabelle - mehr gehen ja ohnehin nicht - die quasi den Zustand der Applikation enthält! Diese Tablle enthält jeweils Attributname, einen Index und den Inhalt des Attributs bzw. eben einer Tabellenzeile!
Im Endeffekt entsteht eine Tabelle mit ca. 3000-4000 Einträgen die jeweils 1096 Zeichen enthalten Damit diese auch wieder ausgelesen werden, wird zu Beginn ein Cookie auf den Client geschrieben, welches eine eindeutige ID enthält und über das die Verbindung zum Server-Cookie hergestellt wird. Läuft die Applikation ohne Probleme durch werden die Cookies wieder gelöscht. Bricht sie ab, kann über das Client-Cookie die Applikation wieder an der STelle aufgenommen werden, an der sie abgebrochen ist!

Ich hoffe Du hast es jetzt verstanden um was es geht. Ich mache da nichts falsch, die Applikationsklasse hat weit über 100 Attribute, von denen gut und gerne 50 Tabellen sind. Wenn Du ne bessere Lösung hast, kannst Du sie mir gerne sagen. Bin ich dankbar dafür... Die Methode sollte halt auch noch laufen wenn es mal 200 Attribute sind! Außerdem scheinst Du Server mit Client zu verwechseln... Auf dem Server werden die Cookies ja auch nur irgendwo in ner Datenbank abgelegt und da hab ich soviel Platz wie ich will. Wenn wir nur 20 Cookies ablegen könnten, dann wäre unser Server schon lang geplatzt! Und mit 4KB würdest auch nicht weit kommen. Diese Cookies werden auch eingesetzt um Daten von Seite zu Seite weiterzugeben... lass da mal ne größere Tabelle drinstehen, dann bist schnell über 4KB!

Und bevor Du nächstes Mal hier rumpampst informier Dich richtig und les vor allem die Beiträge die schon dastehen, da steht nämlich schon dass ich EINE Tabelle wegschreibe! Aber nix für ungut!

So jetzt zudem was ich wissen sollte. Wenn eben dieses Riesen-Cookie gespeichert wird, hab ich rund 70 Einträge in der SSCOOKIE die sich ALLE auf ein und dasselbe Cookie beziehen! Ich wollte wissen welche Datenmenge je Eintrag möglich ist, denn die Einträge gehören letztendlich alle zusammen. Kann man das womöglich ändern, dass pro Eintrag mehr zu speichern geht?

Gruß
Troopy
Enrico4983
..
..
 
Posts: 39
Joined: Mon Aug 04, 2003 3:54 pm

Postby Jolie2216 » Thu Nov 13, 2003 12:29 pm

Hmm. Ist das nicht durch die Tabellen Definition von SSCOOKIE vorgegeben LRAW1024 für den Datensatz. Ich glaub da kannst du nichts daran ändern. Da der SS-Cookie aber so oder so in eine Tabelle geschrieben wird, könntest du auch eine eigene Tabelle für die Applikation erstellen die du dann ja nach deinem Guste definieren könntest.

Ist es möglich die Applikation irgendwie in Teilabschnitte aufzuteilen?!?
Jolie2216
..
..
 
Posts: 38
Joined: Fri Mar 28, 2003 5:28 pm

Postby Enrico4983 » Thu Nov 13, 2003 12:43 pm

Die Applikation hat ja Teilabschnitte, nach denen jeweils das Cookie geschrieben wird. Ich habe jetzt allerdings alles was nicht unbedingt nötig ist rausgenommen, jetzt geht es auch von der Größe her!

mfg
Troopy
Enrico4983
..
..
 
Posts: 39
Joined: Mon Aug 04, 2003 3:54 pm

Next

Return to BSP + BHTML

Who is online

Users browsing this forum: No registered users and 10 guests