2012-04-28 91 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