-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

あなたのコードは機能しません。Hammer を実行しようとしている場合、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] );
}
于 2012-04-28T23:25:53.713 に答える