2012-04-28 89 views
-3

我想致力於使用程序php處理會話。使用程序PHP處理會話

我會用我如何開始我的大多數項目的開始:

session_name('Easy_App'); 
session_start(); 

if (!isset($_SESSION['ip'])){ 
    $_SESSION['ip'] = $_SERVER['REMOTE_ADDR']; 
} 

if (!isset($_SESSION['created'])){ 
    $_SESSION['created'] = time(); 
} 

if (!isset($_SESSION['overall_views'])){ 
    $_SESSION['overall_views'] = 1; 
} 
else { 
    $_SESSION['overall_views']++; 
} 

if (!isset($_SESSION['username'])){ 
    $_SESSION['username'] = ""; 
} 

if (!isset($_SESSION['logged_in'])){ 
    $_SESSION['logged_in'] = 0; 
} 

/*A quick method to keep pageviews to < 5 pages per 1 second per session*/ 
if (!isset($_SESSION['first_action'])){ 
    $_SESSION['first_action'] = time(); 
} 

$first_action = $_SESSION['first_action']; 
if (!isset($_SESSION['action'])){ 
    $_SESSION['action'] = 1; 
} 
else{ 
    $_SESSION['action']++; 
} 

$action=$_SESSION['action']; 
if ($action>=5){ 
    unset($_SESSION['action']); 
    unset($_SESSION['first_action']); 
    if((time() - $first_action) <=1){ 
    exit("Please Don't Hammer My Site "); 
    } 
} 

所以我們有一個出發點:

  1. 有一些經常使用的參數的會話的開始
  2. 在最後幾行中,防止臨時用戶敲打。

我的問題是這樣的:

在哪裏,你會何去何從?上述代碼的改進或您使用過程式php處理會話的簡要摘錄將不勝感激。

+1

程序PHP? – 2012-04-28 23:20:40

+0

第一個改進是格式化。這是一段密密麻麻的文字。學會喜歡Enter鍵。 – HappyTimeGopher 2012-04-28 23:25:40

+0

@HappyTimeGopher注意到,我的朋友! – FredTheWebGuy 2012-04-28 23:37:11

回答

1

您的代碼將無法正常工作。如果你想STOP錘子或FLOODING如果用戶不守cookies your Sessions are useless和腳本是一種浪費......你應該使用存儲Memcache等系統嘗試更好的方法,MongoDB的或Redis的

參見:https://stackoverflow.com/a/10155437/1226894 ....這已經回答了前

編輯1

我不知道你想procedural PHP什麼,但我希望這可以幫助

目標

  • 刪除重複isset
  • 刪除重複if聲明
  • 創建單一的功能來獲取和設置$_SESSION
  • 試圖讓一切的功能和隱藏所有變量

最終代碼

session_start(); 
include("procedural.function.php"); 
__SESSION ('ip', $_SERVER ['REMOTE_ADDR']); 
__SESSION ('created', time()); 
__SESSION ('overall_views', 1); 
__SESSION ('overall_views', "++"); 
__SESSION ('username', ""); 
__SESSION ('logged_in', 0); 
__SESSION ('first_action', time()); 
__SESSION ('action', "++"); 

if (__SESSION ('action') >= 5) { 
    __UNSET ('action'); 
    __UNSET ('first_action'); 
    if ((time() - __SESSION ('first_action')) <= 1) { 
     exit ("Please Don't Hammer My Site "); 
    } 
} 

procedural.function.php

function __SESSION($var, $value = null) { 
    if ($value === null) { 
     return isset ($_SESSION [$var]) ? $_SESSION [$var] : null; 
    } else if ($value === "++") { 
     isset ($_SESSION [$var]) ? $_SESSION [$var] ++ : $_SESSION [$var] = 0; 
     return $_SESSION [$var]; 
    } else { 
     isset ($_SESSION [$var]) ? $_SESSION [$var] = $value : null; 
     return $value; 
    } 
} 


function __UNSET($var) { 
    unset ($_SESSION [$var]); 
} 
+1

我認爲「程序性的PHP」,他的意思是沒有OOP。所以Memcache類可能不是他所追求的。 – HappyTimeGopher 2012-04-28 23:27:10

+0

@HappyTimeGopher我只是給了我的意見..據我所知,如果他的目的是爲了防止垃圾郵件或錘子,他的整個劇本是無用的,他稱之爲... – Baba 2012-04-28 23:29:08

+0

使用沒有OOP作爲要求只是沒有任何意義... – 2012-04-28 23:29:29