-3

我想将此页面专门用于使用程序 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 处理会话的简短片段将不胜感激。

4

1 回答 1

1

您的代码将不起作用如果您尝试STOPHammer 或者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 " );
    }
}

程序.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] );
}
于 2012-04-28T23:25:53.713 回答