【问题标题】:Handling sessions with procedural PHP使用程序 PHP 处理会话
【发布时间】:2012-04-28 23:17:45
【问题描述】:

我想将此页面专门用于使用过程 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 处理会话的简要 sn-p 将不胜感激。

【问题讨论】:

  • 第一个改进是格式化。那是一堵密密麻麻的文字墙。学会爱上 Enter 键。
  • @HappyTimeGopher 注意到了,我的朋友!
  • @KarolyHorvath 是的,先生!不需要时间机器。简洁明了的加分项。

标签: php session


【解决方案1】:

如果您尝试使用STOP Hammer 或FLOODING,则您的代码将无法工作,如果用户不保留cookies your Sessions are useless 并且脚本是浪费...您应该尝试使用内存缓存等存储系统的更好方法, 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] );
}

【讨论】:

  • 我认为“procedural php”是指没有 OOP。所以这个 Memcache 类可能不是他所追求的。
  • @HappyTimeGopher 我只给出了我的意见.. 据我所知,如果他的目标是防止垃圾邮件或锤子,他称之为整个脚本是无用的......
  • 好的。是否使用 cookie 不是问题的重点。您将如何使用程序 php 处理会话?顺便说一句-每个项目都不一定需要 memcached。感谢您的反对。
  • @DudeSolutions:您可能应该解释一下“程序化 php”是什么意思,更好的是,包括为什么要限制自己。
  • @Baba 读起来像诗!现在我开始想知道为什么人们想将自己限制在 OOP PHP 上:P
猜你喜欢
  • 2015-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-22
  • 2018-08-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多