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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 285207
Url: https://administrator.de/contentid/285207
Ausgedruckt am: 19.12.2024 um 15:12 Uhr
11 Kommentare
Neuester Kommentar
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:
"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 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.
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
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
"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 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
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...
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...
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
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
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
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
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
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