php Script - Daten speichern für 30 min
anastasia
- php
Hallo,
dies ist mein erster Post und mein erstes php script.
Ich suche für mein Script eine Methode (habe keine Idee) und dies möglichst ohne mySQL, wie ich neu erstellte seesionID 30 Minuten vergleichen kann, so das diese sich innerhalb eines 30 Minutentimers nicht wiederholen kann. Gibt mir die URL via get eine seesionID mit, gebe ich diese einfach wieder zurück, kommt keine mit, erstelle ich eine neue (nicht wundern, random + Datumsformat war eine Spielerei zum erstellen einer neuen sessionID).
Wie kann ich nun verhindern, dass sich die ID nicht wiederholt innerhalb 30 Mintuen. Ich stelle mir eine Möglichkeit vor, wo ich alle sessionIDs 30 Mintuen zwischenspeichere (extra Datei) und das php script alle IDs hinein schreibt und vor der Neuausgabe vergleicht. Andere Ideen greife ich aber auch gern auf.
<html>
<body>
<?php
$timestamp = time();
$ID = date ("wimHws",$timestamp);
//
error_reporting(E_ALL);
echo "<br />\n";
// SESSION ID pruefen und erstellen
if(isset($_GET['sessionID']))
{
echo "sessionID=alt <br />\n";
echo "sessionID=".$_GET['sessionID']."<br />\n";
}
else
{
$zufall = rand(1000000000,2400000000);
$IDneu = ($ID+$zufall);
echo "sessionID=neu <br />\n";
echo "sessionID=$IDneu <br />\n";
}
?>
</body>
</html>
Danke für eure Hilfe!
Hi,
Ich suche für mein Script eine Methode (habe keine Idee) und dies möglichst ohne mySQL, wie ich neu erstellte seesionID 30 Minuten vergleichen kann, so das diese sich innerhalb eines 30 Minutentimers nicht wiederholen kann.
ähm, warum verwendest Du nicht den Session-Mechanismus von PHP, der dies schon kann?
Cheatah
die automatisch sessionID ist 32 stellig (oder verstehe ich es falsch), ich möchte aber mit einer 10 stelligen arbeiten. Wir möchten damit anfragen vn einem IVR System bearbeiten, welches nur 10 stellige verarbeiten kann.
Hello,
die automatisch sessionID ist 32 stellig (oder verstehe ich es falsch), ich möchte aber mit einer 10 stelligen arbeiten. Wir möchten damit anfragen vn einem IVR System bearbeiten, welches nur 10 stellige verarbeiten kann.
PHP benutzt auch keine wirklich 32-stelligen Session-IDs, sondern nur eine zweiundreißig Digits lange Hexadezimal-Nummer.
Wenn man mit session_name() einen Namen festlegt, wird dieser beim Session-Start benutzt.
Harzliche Grüße vom Berg
http://www.annerschbarrich.de
Tom
Löschen verwaister Sessiondateien
Wenn ein PHP-Script nicht über einen "Logout"-Mechanismus verfügt, oder es nie zu der Ausführung eines solchen Mechanismus kommt, weil ein imaginärer Benutzer den imaginären "Logout"-Button nicht gedrückt hat und man nicht mit session_destroy() reagieren kann, werden ältere und verwaiste Sessiondateien bei dem chronologisch nächsten Request bzw. Initialisierung der Session (session_start() resp. session_register()) gelöscht.
Die Initialisierung der Session setzt zuerst einen Prozeß in Gang, den man Garbage Collection (gc) nennt, und der dafür sorgt, dass alle verwaisten Sessiondateien aus dem Filesystem entfernt werden - erst danach wird ggf. eine neue Sessiondatei angelegt.
Um zu bestimmen, ob eine Sessiondatei verwaist ist, stellt PHP 4 den Konfigurationsparameter session.gc_maxlifetime in der php.ini bereit.
Der nummerische Wert von session.gc_maxlifetime gibt an, nach wievielen Sekunden eine Sessiondatei als Müll angesehen wird und entfernt werden darf (Default: 1440 Sekunden = 24 Minuten). Wenn die Differenz aus der Initialisierungszeit der Session (Jetzt-Zeit aus der Sicht des Scripes) und dem letzten Zugriff auf eine oder mehrere Sessiondateien den session.gc_maxlifetime-Wert übersteigt, werden diese Dateien gelöscht.
In der PHP 4-Defaulteinstellung wird die Garbage Collection statistisch jedoch nur bei jedem hundertsten session_start() angestoßen.
Verantwortlich hierfür ist der Konfigurationsparameter session.gc_probability. Dieser hat den Wert "1" und gibt die Wahrscheinlichkeit an, mit welcher die Müllsammlung gestartet wird, also in 1% der Fälle. Möchte man, dass ältere Sessiondateien zuverlässig gelöscht werden, so ist dieser Wert auf 100 (=100%) zu stellen.
Jede Garbage Collection benötigt natürlich auch ein wenig Zeit, sodaß man sich die Frage stellen sollte, ob es nicht ausreicht die Sessiondateien z.B. nur bei jeder zehnten Sessioninitialisierung (10%) löschen zu lassen.
Diese Parameter können in der php.ini, aber auch - wie viele andere Optionen - in den Webserverkonfigurationsdateien, der .htaccess-Datei oder direkt im Script beeinflußt werden.
Hier ein paar Beispiele für die verschiedenen Konfigurationsmöglichkeiten:
php.ini:
session.gc_maxlifetime = 600 ; 10 Minuten Lebenszeitsession.gc_probability = 50 ; 50% - ca. bei jedem ; zweiten Mal löschen
httpd.conf oder .htaccess oder verwandte Dateien:
Direkt im Script:
<?php // 20 Minuten Lebenszeit ini_set("session.gc_maxlifetime", 1200); // 100% Wahrscheinlichkeit ini_set("session.gc_probability", 100);?>
Werden diese Parameter direkt im Script verändert, so muß dies vor dem ersten session_start() resp. session_register() ausgeführt werden, also bevor die Session initialisiert wird.
Hello,
damit der GC arbeiten kann, muss der PHP-Prozess Leserechte auf die Verzeichnistabelle haben, also die Namen der Files im Verzeichnis scannen dürfen. Bitte nicht verwechseln mit dem Leserecht auf die einzelne Datei :-)
Harzliche Grüße vom Berg
http://www.annerschbarrich.de
Tom
Hallo,
versuch:
$zeit = time(); # Aktuelle Zeit ermitteln
$verfallszeit = $zeit-1800; # Verfallszeit = 1800 Sekunden
if($zeit<$verfallszeit){ # Wenn Verfallszeit erreicht
$zeichen = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz12345678901234567890";
# Neue ID generieren
for ($i=0;$i<16;$i++){
$n=rand() % strlen($zeichen);
$idneu .= substr($zeichen,$n,1);}
sessionID=$idneu;} # Neue ID übergeben
Die Zeit kannst du per GET mit schleifen.
Wenn Du register_globals auf on hast,
brauchst du nicht $_GET['sessionID']
zu verwenden sondern kannst direkt auf
$sessionID zugreifen.
Hilft dir das?
Grüße, Matze