---
title: "Sessions, Förhindra Flood"
type: "forum-thread"
url: "https://www.webforum.nu/amne/php/170325-sessions-förhindra-flood"
topic: "PHP"
topic_url: "https://www.webforum.nu/amne/php"
author: "Simpa"
published: "2008-03-29T19:47:01.000Z"
updated: "2008-03-31T20:09:37.000Z"
replies: 9
views: 717
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/php/170325-sessions-förhindra-flood"
---

# Sessions, Förhindra Flood

## #1 — Simpa, 2008-03-29T19:47Z

Hejsan, 
Håller på att lära mig sessions, men får inte detta att fungera som jag vill!
Det jag vill uppnå är att om man postat ett inlägg, så ska man inte kunna posta ett nytt inom 2 minuter, men sessionen verkar inte vilja dö ut, och värdet på "timer" förblir 2 efter ett postat inlägg!

skicka.php

```php
session_cache_expire(1);
session_start();
if (isset($_SESSION['timer'])){ 
}
else {
$_SESSION['timer'] = 1;
}
```

Ta_Emot_Och_Bearbeta.php

```php
session_cache_expire(2);
session_start();

if (isset($_SESSION['timer'])){ 
}
else {
$_SESSION['timer'] = 1;
}

if ($_SESSION["timer"] == "2")
{
echo "Du måste vänta 2 minuter";
}
elseif ( - kod -)
{
echo "Du har inte fyllt i alla fält ordentligt, försök igen";
$_SESSION["timer"] = "1";
}
else 
{
$_SESSION["timer"] = "2";
echo "Ditt meddelande sparat";
- Kod -
}
```

Sidan: <http://www.trailerpark.nu/p/text/tyck.php>
För att döda sessionen: <http://www.trailerpark.nu/p/text/doda.php>

Går det inte att använda sessions så här? Eller måste jag använda mig av cookies?

/ Simon

Permalänk: https://www.webforum.nu/p/170325

## #2 — Gislaved, 2008-03-29T20:16Z

Jag skulle nog valt att spara tidpunkten för det senaste inlägget istället för de siffror du använder nu. Då kan du alltid jämföra med aktuell tid och se om två minuter har passerat.

Permalänk: https://www.webforum.nu/p/2094597

## #3 — Simpa, 2008-03-29T20:27Z

Ibland fungerar inte huvudet, självklart är det en bättre ide! Tack.

Permalänk: https://www.webforum.nu/p/2094601

## #4 — Simpa, 2008-03-30T00:37Z

Vad är fel på följande if sats?

```php
if ( !empty($_SESSION['timer']) and $_SESSION['timer'] + 120 < time()){
$tid = 1;
}
elseif ( empty($_SESSION['timer']))
{
$tid = 1;
}
else 
{
$tid = 0;
}

if ($tid == 1) 
{
echo "Du måste vänta 2 minuter för att kunna posta igen.";
}
else
{
$_SESSION['timer'] = time();
echo "Ditt meddelande har nu blivit skickat!";
}
```

Som det är nu så blir alltid $tid == 1?

Permalänk: https://www.webforum.nu/p/2094635

## #5 — aasah, 2008-03-30T06:47Z

Har du session_start(); högst upp i filen?

Jag tror ett problem är att du inte kollar om sessionsvärdet är satt. Om du alltid sätter värdet när man postar något, så **måste** värdet finnas för att man ska kunna ha postat alldeles nyligen. Utnyttja det!

Och varför krångla till det?

```php
session_start(); //<---- Måste stå på första raden

if ( isSet(($_SESSION['timer']) && $_SESSION['timer'] + 120 < time()) {
   //Postat för mindre än 2 min sedan
   echo "Du måste vänta 2 minuter för att kunna posta igen.";
}
else {
   //Klart att posta
   // < kod för att posta >
   $_SESSION['timer'] = time();
   echo "Ditt meddelande har nu blivit skickat!";
}
```

Permalänk: https://www.webforum.nu/p/2094643

## #6 — Simpa, 2008-03-30T17:48Z

Snart flintis här, fungerar det verkligen att göra en sådan här if sats? 

```php
if ($_SESSION['timer'] + 120 < time()) {
```

Har försökt på massor av olika sätt att få detta att fungera, men antagligen släpper ifsatsen inte igenom någon, eller så släpper den igenom allt lite beroende på hur jag gör..!

Kan ju visa koden just nu, som säkert ser väldigt överarbetad och onödig ut, men inga lättare sätt verkar fungera heller.. tycker detta borde fungera i teorin..!

```php
<?php
session_start();
$tid = time();
if (isset( $_SESSION['timer'] ) ){
$tstamp = "55";
$tajm = $_SESSION['timer'];
} else {
$tstamp = "100";
$_SESSION['timer'] = "55";
$tajm = "123";
}

if ( $tstamp == "55" && $tajm + 120 < $tid )
{
echo "Du måste vänta 2 minuter innan du postar igen";
else 
{
// Kod för spara..
$_SESSION['timer'] = $tid;
}
?>
```

Har även testat att göra det lite enklare som exemplet ovan, men det ville sig inte heller..!
}

Permalänk: https://www.webforum.nu/p/2094713

## #7 — aasah, 2008-03-30T20:53Z

> **Simpa skrev:**
>
> Snart flintis här, fungerar det verkligen att göra en sådan här if sats? 
>
>
> ```php
> if ($_SESSION['timer'] + 120 < time()) {
> ```

Ja. 120 = 60\*2 (sekunder) = 2 min så det villkoret säger i ord "det är mer än 2 min sedan du senast postade".

Resten av din kod ser däremot mera skum ut! Du kan **inte** blanda diverse heltalssiffror med time. time() innehåller uppgift om hur många sekunder som gått sedan något fixt, gammalt datum.

Ett fel i ditt skript är att du sätter $tid till time() men jämför mot sessions-variabeln. Som alltså redan från början får ett gammalt time-värde eftersom det mellanlagrats i en variabel.

När någon postar sätter du $\_SESSION\['timer'\] = time(); se mitt exempel ovan. För övrigt: ta mitt exempel ovan rakt av och testa med. Blanda inte in dina heltalsvariabler.

Permalänk: https://www.webforum.nu/p/2094759

## #8 — Simpa, 2008-03-31T16:04Z

Kör ungefär precis som det du sagt ovan aasah, men den släpper inte igenom något, är du säker på att det går att köra isset på en icke satt $\_SESSION? Valde att skriva ut värdet på $\_SESSION och det är 1, även om den inte är satt någonstans innan.. 

Valde då att skriva if satsen så här, 

```php
if ( isSet($_SESSION['timer']) && $_SESSION['timer'] != 1 && $_SESSION['timer'] + 120 < time()) 
{ 
echo "Du kan inte posta ännu";
}
else 
{
$_SESSION['timer'] = time(); 
echo "Postat";
```

Men då släppte den igenom allt igen.. Allt eller inget hmm :)

Tack för hjälpen förresten!

Permalänk: https://www.webforum.nu/p/2094862

## #9 — Simpa, 2008-03-31T16:23Z

Fått igång det nu!

Så här ska det självklart se ut, en felvänd \> :)

```php
if ( isSet($_SESSION['timer']) && $_SESSION['timer'] != 1 && $_SESSION['timer'] + 120 > time()) 
{
```

Undrar dock lite fortfarande om isSet fungerar, eller om värdet på en osatt $\_SESSION alltid är 1? 

Tack,

Permalänk: https://www.webforum.nu/p/2094863

## #10 — aasah, 2008-03-31T20:09Z

> **Simpa skrev:**
>
> Undrar dock lite fortfarande om isSet fungerar, eller om värdet på en osatt $\_SESSION alltid är 1?

PHP är ett förlåtande språk som så långt det kan försöker tolka ut hur programmeraren egentligen menade - inte alltid med bra resultat. Exvis kommer du inte att få rapporterade fel om du blandar in en osatt variabel i en jämförelse, däremot riskerar du att variabeln **får** det värde det var meningen att den skulle **jämföras mot**!!! :o Det är det du råkar ut för när du tror att den har värdet 1 med automatik. För att komma ifrån dessa oönskade effekter ska man som regel **alltid** kolla att variabeln är satt (med isSet() ) innan man använder den till något. Gäller variabler som du inte själv alltid tilldelar värden, tex GET, POST, COOKIE, SESSION.

Permalänk: https://www.webforum.nu/p/2094917

---

Tråden på webben: https://www.webforum.nu/amne/php/170325-sessions-förhindra-flood
