anpera.net
https://anpera.homeip.net/phpbb3/

Sinn von $revertsession?
https://anpera.homeip.net/phpbb3/viewtopic.php?f=25&t=5362
Seite 1 von 1

Autor:  Tidus [ Mo 03 Okt, 2011 23:31 ]
Betreff des Beitrags:  Sinn von $revertsession?

Hallo,

ja lang ist es her seit ich mal wieder ein Thema eröffnet habe^^


Meine frage bezieht sich auf $revertsession die bei mir nur ca 3 mal in der common.php auftaucht und zwar bei der checkday funktion und weiter unten irgendwo. Das ist denke ich mal Standart denn ich erinnere mich nicht im entferntesten daran etwas daran verändert zu haben.

Allerdings erschließt sich mir der sinn nicht, da die revertsession gesetzt wird _nachdem_ bei checkday die aktuelle session wieder auf revertsession gestellt wird. Ist die Session denn dann nicht veraltet, und wozu das ganze?


Ich habe nämlich ein problem das lautet wie folgt: Wenn man einen Post schreibt und dann abschickt wenn schon ein Newday ist, wird zwar der Post in die Datenbank eingelesen, aber, die Donationpoints bleiben auf dem alten wert (diese werden _vor_ dem eintragen in der datenbank berechnet und gutgeschrieben). Und ich denke das es vielleicht damit zusammenhängen könnte, das dort eben noch die $session von vor einem pagehit abgespeichert ist, und dann eben der alte wert wieder in der Session landet???

könnte mich auch durch die fortgeschritte Uhrzeit total auf dem Holzweg befinden??? klärt mich jemand auf? XD

grüße

Autor:  Harthas [ Di 04 Okt, 2011 06:23 ]
Betreff des Beitrags:  Re: Sinn von $revertsession?

Kannst du sie nicht einfach $session['user']['donation'] gutschreiben anstatt direkt auf die Datenbank zuzugreifen? (Sofern die Punkte automatisch vergeben werden. Ist etwas schwer zu erkennen, da die source.php nicht funktioniert ;)).

Dann sollten die Punkte beim neuen Tag im revertsession liegen, und dann in die Datenbank geschrieben werden. ;)

Im übrigen ist das Ziel von revertsession (soweit ich es erkennen kann), dass man am newday noch den gleichen Inhalt in der Session hat wie vorher.

Autor:  Tidus [ Di 04 Okt, 2011 13:01 ]
Betreff des Beitrags:  Re: Sinn von $revertsession?

Hallo,

lol den fehler in der Source php, ich hab keine ahnung wann der da reingerutscht ist -_-

es wird in genau diese Session hineingeschrieben, das problem liegt aber daran das der newdaycheck kommt BEVOR die aktuelle session in revertsession landet, und deswegen geht es verloren ... so glaube ich.

Ablauf:

Neue Tag bricht an, du schreibst den post zuende, punkte werden berechnet und in die session des users geschrieben, newday check läuft ab, $session = $revertsession, und danach dann $revertsession = $session;

d.h. aus meiner sicht ist es eben in dem moment die Session von vor einem Pagehit ...
außerdem die Common.php könntest du eh nicht einsehen das ist dann doch etwas zu delikat^^ aber den fehler beheb ich trotzdem..

EDIT: Fehler behoben, ...^^^ Könnte man dann theoretisch einfach das $revertsession entfernen? ich sehe keinen grund wieso am newday die session so gesetzt werden sollte? sie geht ja wegen dem newday nicht verloren oder so...

Autor:  Harthas [ Di 04 Okt, 2011 13:09 ]
Betreff des Beitrags:  Re: Sinn von $revertsession?

Eigentlich sollte der newdaycheck erst nach dem setzen von revertsession ausgeführt werden. (Wird ja bereits in der common.php gesetzt, checkday() wird aber erst nach dem einbinden der common.php aufgerufen.)

Ansonsten gilt es einfach sicher zu stellen, dass die addcommentary (oder wo du deine Ounkte auch immer gutschreibst), vor der checkday aufgerufen wird.

Am besten debugst du mal etwas. Solange du nur vermutest bringt das auch nicht sonderlich viel ;)

Autor:  Tidus [ Di 04 Okt, 2011 13:13 ]
Betreff des Beitrags:  Re: Sinn von $revertsession?

Nunja addcommentary ist eine meiner ausgelagerten funktionen, diese wird im kopf der datei eingebunden also quasie vorher ausgeführt oder?

ich probier einfach mal rum, ... aber wie gesagt, wenn irgendjemand sicher sagen kann das ich es einfach entfernen könnte wäre ich über die info sehr verbunden^^

grüße

EDIT: wenn ich es auskommentiere funktioniert die gutschrift, ich bemerke auch keinen nachteil, hm..^^

Autor:  Charon [ Di 04 Okt, 2011 19:35 ]
Betreff des Beitrags:  Re: Sinn von $revertsession?

Ich schätze mal, das Ganze ist einfach als kleine Schutzmaßnahme gedacht.
Nehmen wir mal an, jemand hat das checkday() falsch am Ende eines Skriptes eingefügt, in dem der Spieler Gold bekommt oder andere Dinge am Account geändert werden. Dann würde das Skript durchlaufen, der neue Tag kommt erst jetzt und danach würde das Skript nochmal durchlaufen und nochmal Gold gutschreiben.
Daher wird $session einfach gesichert, bevor etwas geändert wird, und im Fall eines neuen Tages von checkday auf diesen Stand zurückgesetzt. Quasi als ob das Skript, in dem der Tag ausgelöst wurde, nie aufgerufen wurde. Das passiert dann wirklich erst nach dem neuen Tag.

Genau das macht jetzt das Problem bei Tidus:
Der Beitrag wird abgeschickt, mit der neuen Seite wird erstmal die common.php eingebunden und $revertsession gesetzt. Dann kommt addcommentary(), speichert den Beitrag und die Donationpoints in der $session. Jetzt kommt aber checkday(), stellt einen neuen Tag fest und setzt $session wieder auf $revertsession zurück, bevor zur newday.php umgeleitet wird und weg sind die Punkte.

Ich wüsste jetzt so keine Stelle an dem der Verzicht auf $reversession ein Problem macht, aber ich kann es jetzt auch nicht ausschließen.

Vielleicht wäre es alternativ eine Idee, in der addcommentary() die Donationpoints parallel zu $session auch in $revertsession zu speichern. Das müsste doch eigentlich funktionieren... im Normalfall ist es ja bedeutungslos und bei einem neuen Tag wird $revertsession dann übernommen. :?

Autor:  Linus [ Di 04 Okt, 2011 20:09 ]
Betreff des Beitrags:  Re: Sinn von $revertsession?

Das gleiche Problem wie Tidus hatte auch ich. Ich habs mit einem Hack gelöst, nicht schön, aber es funktioniert.

In der addcommentary():$this->bbcode_second_pass_code('', 'function addcommentary() {
global $_POST,$session,$REQUEST_URI,$_GET,$doublepost,$revert_dp,$rporte,$gott;
...
if ($session['user']['rp_only']>=1) $session['user']['donation']+=$points;
$revert_dp=$session['user']['donation'];
...
')

und in der funktion checkday():$this->bbcode_second_pass_code('', 'function checkday() {
global $session,$revertsession,$REQUEST_URI, $revert_dp;
if ($session['user']['loggedin']){
output("<!--CheckNewDay()-->",true);
if(is_new_day()){
$session=$revertsession;
if ($revert_dp>$session['user']['donation']) $session['user']['donation']=$revert_dp;
....

')
Mein RP-System funktioniert zwar ein wenig anders als die meisten, aber der Sinn dahinter sollte verständlich sein. ;)

Autor:  Tidus [ Di 04 Okt, 2011 22:14 ]
Betreff des Beitrags:  Re: Sinn von $revertsession?

Hallo,

ja aus dem licht betrachtet das da einige sachen doppelt gutgeschrieben werden, macht es natürlich sinn. Aber darüber hatte ich bis jetzt garnicht nachgedacht da ich es ja eigentlich immer im kopf der datei aufrufe.

@Linus: Das ist natürlich immernoch eine elegantere lösung im vergleich dazu die revertsession zu entfernen, allerdings, da es ja nur passieren kann wenn man es am ende einer datei aufrufen würde, wäre der grund es nicht zu entfernen wieder nicht gegeben.

hmmm... Es wäre wirklich interessant dazu noch weitere Denkansätze zu haben, also wozu es gut sein könnte, ist immer mal interessant wie so ein paar Zeilen ein neues licht bekommen wenn man darüber nachdenkt. Im moment erscheint es mir eher so als ob man damit noch mehr probleme haben könnte die einem zur zeit noch nicht bewusst sind, da glaube aus den Gilden von Dasher die ein bisschen Rabenthal mitbringen unten am ende der Common.php funktionen wegen dem Transfehr burg eingefügt werden die ja wieder nach revertsession umgesetzt würden etc.

wenn man sich genau im klaren darüber ist was man damit erreichen will, könnte man vielleicht für die Zukunft auch etwas effektiver damit umgehen und/oder eine neue lösung dafür finden falls noch nötig^^

grüße

Seite 1 von 1 Alle Zeiten sind UTC + 1 Stunde
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/