djevil-ad
Goto Top

Php session nach n Minuten beenden ohne cronjobs ?

Hallo, hallo,

Ich bin gerade dabei meinen Warenkorb zu entwickeln,

und ich finde keine Lösung, wie ich den Warenkorb nach 30 Min wieder zurücksetzen kann.


Bzw. Genauer:

Die Artikel im Warenkorb sollen (wenn sie nicht gekauft wurden) nach 30 Min wieder aktiviert werden.

Derzeit nutze ich folgenden Code:

if ($time > $_SESSION['timeout'])
{

$_SESSION = array();
session_destroy();

$sqlupdate = "UPDATE `articles` SET status=:status WHERE status='cart'";
$preparedStatement = $conn->prepare($sqlupdate);
$preparedStatement->execute(array(':status' => "Active"));


Aber der funktioniert ja nur ,wenn die Seite, nach Ablauf des timeout wieder aufgerufen wird.
(Also nicht, wenn z.B. der Browser geschlossen wird)

gibt es da auch noch eine Lösung ohne Cronjobs?

Mfd

dd

Content-ID: 285207

Url: https://administrator.de/contentid/285207

Ausgedruckt am: 15.11.2024 um 11:11 Uhr

Arano
Arano 10.10.2015 um 16:48:29 Uhr
Goto Top
Hi,

nur ein paar Gedanken dazu.

1. Einen Auslöser wirst du aber brauchen. Wenn es kein Cronjob ist (wieso nicht ?) bleibt nur eine Userinteraktion.
Das könnten z.B. sein:
  • Detailseite aufrufen (um die freien Bestände sauber anzuzeigen)
  • Etwas in den Warenkorb legen oder z.B.
  • Der Kaufabschluss
Bei der Detailseite erzeugt das wohl eine hohe Arbeitslast da dies häufig passieren wird.
"in den Warenkorb" passiert wohl seltener aber vielleicht immer noch zu oft im Verhältnis zum Nutzen ?
Und beim Kaufabschluss kann es dann theoretisch schon passieren das erst 1000 Besucher sich die Warenkörbe voll hauen, deine Bestände auf NULL sind, aber kein Kauf getätigt wird und so die Bestände für tatsächlich kaufwillige immer noch auf NULL sind. (Wobei das mit der Anzahl der Artikel wahrscheinlich immer unwahrscheinlicher wird).
Ohne Cronjob geht es also eigentlich nicht da dies User unabhängig (und darum geht es ja hier) ausgeführt wird.
Alternativ könnte man auch ein extra Script schrieben das diese Aufgabe übernimmt und das von dir selber oder deinem Rechner (Cronjob/Taskplaner) regelmäßig aufgerufen wird. Dies allerdings wäre dann auch von anderen erreichbar und ausführbar face-smile Dein Rechner muss dann 24h laufen, was wenn der abschmiert/hängen bleibt.

Es gibt bestimmt noch ein paar Aktionen an die man das koppel __könnte__.


2. $sqlupdate = "UPDATE `articles` SET status=:status WHERE status='cart'";
Setzt das nicht ALLE Warenkörbe/Artikel zurück, auch die die gerade erst in den Korb gelegt wurden. Hier fehlt doch die Begrenzung auf den einzelnen tatsächlich abgelaufen Warenkorb und nur dessen Mengen !
Denke eher hier musst du nämlich dein Warenkorbkonzept noch mal überdenken, oder nicht !?


~Arano
djevil-ad
djevil-ad 10.10.2015 um 19:34:16 Uhr
Goto Top
Ja, das setzt zwar alle zurück, bzw. nur die die in der Session gespeichert werden.

Aber ich habe mir jetzt folgendes überlegt:

Ich speichere die Zeit wann die Artikel zurückgesetzt werden sollen und die Artikel im Warenkorb in eine Datei.

Und wenn der nächste Kunde kommt, wird die Zeit verglichen ,und alle Artikel die nicht mehr reserviert werden, werden wieder zurückgetzt bevor sie auf dem Bildschirm ausgegeben werden, ich hoffe ich habe da jetzt keinen Denfkehler, sonst sollte es aber gehen..

Mfg dd
kaiand1
kaiand1 10.10.2015 um 21:24:24 Uhr
Goto Top
Setzt einfach nen timestamp wann der Artiekl in den Warenkorb gelandet ist.
Und denn per Script prüfen ist der Artikel länger als x Zeit drinne dann lösch ihn oder gib ihm 50% Rabatt xD
Dazu kannst du ja auf der Detailseite den Korb checken lassen und vorher in ner Tabelle Abfragen wann der letzte Check zb war.
Aber Cronjob jede Stunde ect würde ja auch gehen...
StefanKittel
StefanKittel 10.10.2015 um 22:06:54 Uhr
Goto Top
Hallo,

Warum kein Cronjob?
Kann der Server / Anbieter das nicht?
Kann ja auch von extern aufgerufen werden. Da gibt es genügend Anbieter.

Als Cron-Job-für-Arme gibt es immer noch die Möglichkeit in der index.php bei jedem Aufruf Aktionen auszuführen.

Ich würde eine kleine PHP-Datei schreiben und diese von extern alle x Minuten aufrufen lassen.

Viele Grüße

Stefan
16568
16568 11.10.2015 um 11:07:53 Uhr
Goto Top
Nur mal so zum Nachdenken:
Dein Ansatz ist der Falsche.
Typischerweise wird der Warenbestand erst dann vermindert, wenn er WIRKLICH abverkauft ist.
Wenn es Dir um das Thema Überverkäufe geht, was ja durchaus bei größeren Shops passieren kann, mußt Du 2 Felder haben.
Eines, welches den TATSÄCHLICHEN Lagerbestand führt, und eines, welches Du "dynamisch" aktualisierst.
Dies kann man bestens nachts dann mit dem tatsächlichen Warenbestand synchronisieren.

Letzten Endes ist es aber totaler Humbug, also lassen.


Lonesome Walker
djevil-ad
djevil-ad 11.10.2015 aktualisiert um 12:44:42 Uhr
Goto Top
@kaiand1 Ja , so in etwa hatte ich es mir gedacht.
djevil-ad
djevil-ad 11.10.2015 aktualisiert um 12:45:14 Uhr
Goto Top
@StefanKittel Nein mein Host bietet in meinen Tarif keine Cronjobs, und externe Cronjobs ist eine Notlösung.
StefanKittel
StefanKittel 11.10.2015 um 12:46:51 Uhr
Goto Top
djevil-ad
djevil-ad 11.10.2015 um 12:47:04 Uhr
Goto Top
@lonesome Walker

Zitat
"Dein Ansatz ist der Falsche.
Typischerweise wird der Warenbestand erst dann vermindert, wenn er WIRKLICH abverkauft ist."


Warum ist das falsch?
Dafür ist doch der Warenkorb....
StefanKittel
StefanKittel 11.10.2015 um 12:55:43 Uhr
Goto Top
Hallo,

ich würde das auch nicht als falsch bezeichnen.
Nehmen wir an, dass es von einem Produkt nur noch 1 Stück gibt.
Du als Kunde tust das in Deinen Warenkorb und freust Dich. Dann gehst Du zur Kasse und bekommst die Infos, dass das Produkt leider ausverkauft ist.
Da fühltst Du Dich doch verarscht.

Stefan
djevil-ad
djevil-ad 11.10.2015 um 13:51:52 Uhr
Goto Top
Das habe ich wohl falsch verstanden..
Das darf natürlich nicht passieren.

Jetzt muss ich erstmal testen und testen und nochmal testen...

mfg
dd