2013-04-27 39 views
0

關於How do I expire a PHP session after 30 minutes?,我從第二個答案複製了一些代碼在30分鐘內PHP會話過期的簡單方法。我想結合登錄和信息到1頁,另一頁是logout.php 這裏是我的代碼。php會話超時所有代碼在一頁中

homepage.php

if(isset($_POST["submitform"])){ 

    $v1 = "admin"; 
    $v2 = "admin"; 
    $v3 = $_POST['username']; 
    $v4 = $_POST['password']; 

    if($v1 == $v3 && $v2 == $v4){ 
    session_start(); 
    $_SESSION['username'] = $v1; 
    $_SESSION['start'] = time(); // taking now logged in time 
    $_SESSION['expire'] = $_SESSION['start'] + (1* 30) ; // ending a session in 30 seconds 

    if(!isset($_SESSION['username'])){ 
     echo "Please Login again <a href='logout.php'>Click Here to Login</a>"; 
    }else{ 
     $now = time(); // checking the time now when home page starts 
     if($now > $_SESSION['expire']){ 
     session_destroy(); 
      echo "Your session has expire ! <a href='logout.php'>Click Here to Login</a>"; 
     }else{ 
     echo "This should be expired in 1 min <a href='logout.php'>Click Here to Login</a>"; 
     } 
    } 
    }else{ 
    echo ' 
    <form method="post"> 
    <input type="text" name="username"> 
    <input type="password" name="password"> 
    <button type="submit" name="submitform">Sign in</button> 
    </form>'; 
    echo '<font color="red">wrong password</font>"'; 
    }  
}else{ 
    echo ' 
    <form method="post"> 
    <input type="text" name="username"> 
    <input type="password" name="password"> 
    <button type="submit" name="submitform">Sign in</button> 
    </form>'; 
} 
?> 

Logout.php

<?php 
session_start(); 
session_destroy(); 
header('Location: homepage.php'); 
?> 

我設置會話過期30秒,但是我發現預期會議不會過期。會議永不過期。我想知道如果我把session_start();放在正確的地方?謝謝

+0

你是怎麼意思永不過期的?你是否已經離開頁面超過30分鐘,然後回來發現自己仍然登錄? – 2013-04-27 19:41:37

+0

@PhillSparks。 30秒30分鐘,縮短了到期時間。是的,我仍然登錄。 – olo 2013-04-27 19:42:20

+0

簡單地檢查$ _SESSION ['expire']與時間,並且如果時間更大,銷燬會話,我從來沒有親自看到時間小於5分鐘的餅乾 – Hawili 2013-04-27 19:56:11

回答

1

您只在表單上檢查會話的狀態。

如果刷新頁面,它將重新發送帖子,登錄並擴展會話。

你的邏輯必須是:

如果後,請檢查密碼和延長會議。

檢查,如果會話已過期(這必須發生,如果出現後與否,都沒有區別。)

基於會話檢查顯示無論是登錄表單或登出消息的結果。

if (isset($_POST["submitform"])) { 

    $v1 = "admin"; 
    $v2 = "admin"; 
    $v3 = $_POST['username']; 
    $v4 = $_POST['password']; 

    if ($v1 == $v3 && $v2 == $v4) { 
     session_start(); 
     $_SESSION['username'] = $v1; 
     $_SESSION['start'] = time(); 
     // taking now logged in time 
     $_SESSION['expire'] = $_SESSION['start'] + (1 * 30); 
     // ending a session in 30 seconds 

    } else { 
     echo ' 
    <form method="post"> 
    <input type="text" name="username"> 
    <input type="password" name="password"> 
    <button type="submit" name="submitform">Sign in</button> 
    </form>'; 
     echo '<font color="red">wrong password</font>"'; 
    die(); 
    } 

    if (!isset($_SESSION['username'])) { 
     echo "Please Login"; 
     echo ' 
      <form method="post"> 
      <input type="text" name="username"> 
      <input type="password" name="password"> 
      <button type="submit" name="submitform">Sign in</button> 
      </form>'; 
    } else { 
     $now = time(); 
     // checking the time now when home page starts 
     if ($now > $_SESSION['expire']) { 
      session_destroy(); 
      echo "Your session has expired ! <a href='logout.php'>Click Here to Login</a>"; 
     } else { 
      echo "This should be expired in 1 min <a href='logout.php'>Click Here to Login</a>"; 
     } 
    } 
+0

是的,你是對的,是否有可能在同一頁面上有不同的會話?或者我必須分開頁面? – olo 2013-04-27 20:07:11

+0

我給我的答案添加了litte更詳細的信息,希望可以幫助 – 2013-04-27 20:08:49

+0

非常感謝:-) – olo 2013-04-27 20:19:20

0

session_start()需要成爲第一行代碼。

另外,您可以將cookie設置爲過期。

+0

我不相信這是問題。邏輯錯誤 – 2013-04-27 19:46:49

+0

@tpow謝謝,我將'session_start()'移動到頁面頂部和代碼的第一行。仍然一樣,會話不會在30秒後過期 – olo 2013-04-27 19:50:39

0

是否有可能在同一頁上有不同的會話?

YES 

所以使用

一個用戶,一個會話。期。

http://us3.php.net/manual/en/ref.session.php