Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/244.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用过程化PHP处理会话_Php_Session - Fatal编程技术网

使用过程化PHP处理会话

使用过程化PHP处理会话,php,session,Php,Session,我想在本页专门介绍如何使用过程化php处理会话 我将从我如何开始大部分项目开始: session_name('Easy_App'); session_start(); if (!isset( $_SESSION['ip'] )){ $_SESSION['ip'] = $_SERVER['REMOTE_ADDR']; } if (!isset( $_SESSION['created'] )){ $_SESSION['created'] = time(); } if (!iss

我想在本页专门介绍如何使用过程化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 ");
  }
}
因此,我们有一个出发点:

使用几个常用参数开始会话 在最后几行中,防止临时用户敲打。 我的问题是:


你会从这里去哪里?如果您能改进上述代码,或者简单介绍一下如何使用过程化php处理会话,我们将不胜感激

如果您试图阻止Hammer或FLOODING,那么您的代码将无法工作如果用户不保留cookie,那么您的会话将毫无用处,脚本将是一种浪费。。。您应该尝试使用memcache、mongoDB或redis等存储系统的更好方法

见:。。。。这一点以前已经得到了回答

编辑1

我不确定你想要什么,但我希望这有帮助

目标

删除重复的isset 删除重复的if语句 创建单个函数以获取和设置$\u会话 尝试将所有内容都变成函数并隐藏所有变量 最终代码

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 " );
    }
}

第一个改进是在格式方面。那是一堵密密麻麻的文字墙。“学会爱上回车键吧!”幸福女神说道,我的朋友@是的,先生!不需要时间机器。简洁和清晰的优点。我认为程序化php意味着没有OOP。所以那个Memcache类可能不是他想要的。@HappyTimeGopher我只是给出了我的意见。。据我所知,如果他的目的是防止垃圾邮件,或者他称之为“锤子”,那么整个剧本都是无用的……好吧。是否使用cookies不是问题的关键。您将如何使用过程化php处理会话?顺便说一句-每个项目不一定都需要memcached。谢谢你的否决票。@DudeSolutions:你应该解释一下你所说的过程化php是什么意思,更好的是,包括为什么你要限制自己使用它。@Baba读起来像诗一样!现在我开始想知道为什么人们只想把自己限制在OOP-PHP:P
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] );
}