$_SESSION na 24 uur verwijderen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Senior, Medior and Junior SAP HANA Developer

Vacature details Vakgebied: Software/IT Opleiding: Medior Werklocatie: Veldhoven Vacature ID: 12696 Introductie Our client is the world's leading provider of lithography systems for the semiconductor industry, manufacturing complex machines that are critical to the production of integrated circuits or chips. Our purpose is “unlocking the potential of people and society by pushing technology to new limits”. We do this guided by the principles “Challenge”, “Collaborate” and “Care”. Wat verwachten we van jou? SAP Certified Application Associate - SAP HANA Cloud Modeling (training and/or certification) Bachelor degree or higher Excellent understanding of SAP HANA (2.0 / Cloud), Data Modelling and writing

Bekijk vacature »

Pagina: 1 2 volgende »

Mvos

mvos

29/01/2008 21:55:00
Quote Anchor link
Is het ook mogelijk om een sesie na 24 uur te verwijderen, zo ja hoe?
 
PHP hulp

PHP hulp

19/05/2024 16:30:22
 
Frank -

Frank -

29/01/2008 21:56:00
Quote Anchor link
Meestal verdwijnt deze al na een half uur, zie de instellingen van jouw server.
 
Mvos

mvos

29/01/2008 22:00:00
Quote Anchor link
ok, bedankt maar is het dan ook mogelijk om op een andere manier er voor te zorgen dat bezoekers maar 1 keer in de 24 uur kunne posten?
Gewijzigd op 01/01/1970 01:00:00 door mvos
 
Jan Koehoorn

Jan Koehoorn

29/01/2008 22:51:00
Quote Anchor link
Ja, een DATETIME waarde opslaan op het moment van posten met de MySQL functie NOW(). Dan kun je met TIME_DIFF checken of er al 24 * 3600 seconden verlopen zijn.
 
Mvos

mvos

29/01/2008 22:54:00
Quote Anchor link
okay, bedankt voor de hulp :)
 
Frank -

Frank -

29/01/2008 22:57:00
Quote Anchor link
Mocht je bv. PostgreSQL gebruiken, dan kun je dit met een CHECK-constraint oplossen. Dan hoef je niet apart te controleren met PHP en een extra query of iemand opnieuw mag posten. Een nieuwe post zal keurig mislukken wanneer de 24 uur nog niet is verstreken.

Dat maakt de controles waterdicht.
 
Erik Rijk

Erik Rijk

30/01/2008 08:39:00
Quote Anchor link
Je zou het op de volgende manier met php kunnen doen:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
   $_SESSION
['timeout'] = time()+86400;
?>

Zo zet je de sessie.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
   if($_SESSION['timeout']>time())
   {

      // je mag dit zien.
   }
   else {
      // je mag dit niet zien, ik vernietig je sessie.
   }
?>

Zo controleer je 'em
Gewijzigd op 01/01/1970 01:00:00 door Erik Rijk
 
Joren de Wit

Joren de Wit

30/01/2008 08:45:00
Quote Anchor link
Helaas heb je niet echt veel controle over de levensduur van sessies aangezien dit vastgelegd is in je php.ini en je daar bij je host vaak niet bij kunt.

Het zou een beetje lullig zijn als die 86400 seconden uit je voorbeeld nog niet verstreken zijn maar de sessie wel al vernietigd wordt omdat ze maximale levensduur overschreden wordt.

De oplossing met de database is hier in ieder geval het beste...
 
Jesper Diovo

Jesper Diovo

30/01/2008 09:59:00
Quote Anchor link
Sla in je database iedere klik op (via IP). Controleer bij iedere klik of de tijd van de laatste klik niet 24 uur geleden is. Is dat zo, unset de sessie dan. Is dat niet zo, vernieuw de sessie.

Je kunt ook via cookies (minder net, maar oké..) een code opslaan die ook bij het IP/de gebruiker wordt opgeslagen. Check dan ook weer of de laatste klik niet 24 uur geleden is, etc. ;)
Gewijzigd op 01/01/1970 01:00:00 door Jesper Diovo
 
Mvos

mvos

30/01/2008 16:07:00
Quote Anchor link
Ik heb is wat rond gekeken tussen turtials hier op het forum, en ik heb wat op google gezocht, maar ik kom er nog niet echt uit hoe ik met TIME_DIFF kan kijken of er al 24 uur voorbij zijn. weet iemand mischien hoe je dat moet doen?
 
Erik Rijk

Erik Rijk

30/01/2008 16:47:00
Quote Anchor link
$sql = "SELECT * FROM tabelnaam WHERE DATE_SUB(NOW(),INTERVAL 1 DAY) <= last_online";

Misschien kan je hier wat mee :)
 
Frank -

Frank -

30/01/2008 16:53:00
Quote Anchor link
Erik Rijk schreef op 30.01.2008 16:47:
$sql = "SELECT * FROM tabelnaam WHERE DATE_SUB(NOW(),INTERVAL 1 DAY) <= last_online";

Misschien kan je hier wat mee :)
Ga dan wel met standaard SQL aan de slag en niet dat MySQL-gebrabbel.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
SELECT
  COUNT(1) AS aantal
FROM
  tabelnaam
WHERE
  datum > NOW() - INTERVAL 1 DAY
AND
  user_id = 23

Wanneer aantal dan groter is dan 0, mag user 23 geen nieuw topic aanmaken. Dat kun je eenvoudig in PHP controleren.
 
Mvos

mvos

30/01/2008 17:18:00
Quote Anchor link
ik heb nu dit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
$ip = $_SERVER['REMOTE_ADDR'];
       $sql = "SELECT ip FROM `gastenboek` WHERE ip LIKE '%$ip%'";
       $query = mysql_query($sql) or die('Fout in mysql!');
       while($check = mysql_fetch_array($query)) {
       if($_SERVER['REMOTE_ADDR'] == $sql){
         $ip = $_SERVER['REMOTE_ADDR'];
         $sql = "SELECT * FROM `gastenboek` WHERE ip LIKE '%$ip%' MINUTE(TIMEDIFF(CURTIME(), check)) < 1440";
         $query = mysql_query($sql) or die('Fout in mysql!');
         if(???????????){
           echo 'U kunt maar een keer in de 24 uur posten!';
          
         }
         else
         {
           echo $form;
         }
       }
       else
       {
         echo $form;
       }
       }

maar ik kom er alleen niet uit wat er in de 'if' moet staan waar de vraagtekens staan
 
Jesper Diovo

Jesper Diovo

30/01/2008 17:25:00
Quote Anchor link
Om op een IP te controleren, hoef je geen LIKE te gebruiken. Gebruik gewoon '=', dus die % om $ip kunnen ook weg. Zet 'm trouwens wel buiten de quotes.

Weg met or die()! Zo'n lompe manier van foutafhandeling... Haal or die(".....") weg uit je script, en controleer na $query = mysql_query($sql) of $query true is. Is dat zo, ga dan door. Gebruik overigens duidelijkere variabelen. $sql is hier niet nodig, daarvoor zou je $query kunnen gebruiken. Waar nu $query staat, hoort eigenlijk $result.

Je controleert eveneens fout bij $_SERVER['REMOTE_ADDR']. Dat is het IP, en dus niet gelijk aan je $sql (in dit geval). Je hoeft hier niet te controleren of het IP daadwerkelijk dat is, dat doet je query namelijk al.

Ik zou bij de post een tijd opslaan van posten (als dat al niet wordt gedaan), dan hoef je geen tweede query te gebruiken en kun je via een if kijken of de tijd 24 uur geleden is. Óf je doet dat direct al in je eerste query ;).
 
Mvos

mvos

30/01/2008 17:30:00
Quote Anchor link
het tijd opslaan en zo heb ik al maar als ik bij bijvoorbeeld de tijd 15:52:36 1440(aanal minuten in een dag) aftrek dan kom er toch een min getal uit of is dat niet het geval?
 
Onbekend Onbekend

Onbekend Onbekend

30/01/2008 17:56:00
Quote Anchor link
Maar als je de browser afsluit kun je weer opnieuw posten. Geld ook voor als je uitlogd (dus er in je script session_destroy(); staat)..
 
Frank -

Frank -

30/01/2008 18:19:00
Quote Anchor link
mvos schreef op 30.01.2008 17:30:
het tijd opslaan en zo heb ik al maar als ik bij bijvoorbeeld de tijd 15:52:36 1440(aanal minuten in een dag) aftrek dan kom er toch een min getal uit of is dat niet het geval?
Je slaat op wanneer een record wordt aangemaakt en dat doe je in een DATETIME (MySQL). Die heeft dus het formaat yyyy-mm-dd hh:mm:ss. Vervolgens ga je met een simpele query kijken of er al een dag of 24 uur is verstreken en klaar ben je.

INTERVAL 1 DAY
INTERVAL 24 HOUR
INTERVAL 5 MINUTE
En zo zijn er nog wel een paar voorbeelden te verzinnen. Rekenen in minuten, bv. 1440, is niet aan te raden, dat is niet duidelijk en kan alleen maar problemen opleveren. Hou je aan de SQL-standaard, die is duidelijk en laat maar weinig ruimte voor fouten. En dat is precies zoals je het hebben wilt!
 
Mvos

mvos

30/01/2008 18:36:00
Quote Anchor link
ik heb nu dit maat her werkt niet echt:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$ip = $_SERVER['REMOTE_ADDR'];
       $sql = "SELECT ip FROM `gastenboek` WHERE ip LIKE '%$ip%'";
       if(mysql_query($sql)){
         $ip = $_SERVER['REMOTE_ADDR'];
         $sql = "SELECT * FROM `gastenboek` WHERE ip LIKE '%$ip%' AND time > NOW() - INTERVAL 1 DAY";
         if(mysql_query($sql)){
           echo 'U kunt maar een keer in de 24 uur posten!';
          
         }
         else
         {
           echo $form;
         }
       }
       else
       {
         echo $form;
       }

en de kolom check heeft een DATETIME
 
Frank -

Frank -

30/01/2008 18:41:00
Quote Anchor link
De eerste query gooi je weg, slaat helemaal nergens op.

In de 2e query loop je met backtics ` en LIKE te klooien. Backtics ` mag je ritueel verbranden en LIKE mag je vervangen door een =.

Maar waarom doe je niks met het voorbeeld van 30.01.2008 16:53 uur? Zonder foutafhandeling heb je overigens geen recht tot klagen, mocht er dan wat fout gaan, is het per definitie jouw eigen schuld. Ga dus eerst maar eens wat aan foutafhandeling doen.
 
Mvos

mvos

30/01/2008 18:51:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
$ip = $_SERVER['REMOTE_ADDR'];
         $sql = "SELECT COUNT(1) AS aantal FROM tabelnaam WHERE check > NOW() - INTERVAL 1 DAY AND ip = $ip";
         if(mysql_query($sql )or die('Fout in mysql!')){
           echo 'U kunt maar een keer in de 24 uur posten!';
          
         }
         else
         {
           echo $form;
         }

maar hij geeft nu Fout in mysql!
 
Jesper Diovo

Jesper Diovo

30/01/2008 19:02:00
Quote Anchor link
Je moet die or die en mysql_query ook niet in de if() zetten.
Voorbeeldje:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php
$ip
= $_SERVER['REMOTE_ADDR'];
$query = "SELECT COUNT(1) AS aantal FROM tabelnaam WHERE check > NOW() - INTERVAL 1 DAY AND ip = '".$ip."'";
// VERANDER WEL DE tabelnaam en de veld namen in de query!!!
$result = mysql_query($query);
if($result) {
// succes
} else {
// geen succes
}
?>
 

Pagina: 1 2 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.