__destruct()析构函数的执行时刻 __construct()构造函数传入参数 构造函数与后台登录安全
<?php class test_construct_avg
{
function __construct($input = '')
{
$this->input = $input;
} function w()
{
var_dump($this);
var_dump($this->input);
} function change_construct_avg($new_input)
{
$this->input = $new_input;
}
} $w = new test_construct_avg(45335);
$w->w();
$w->change_construct_avg('new_input');
$w->w(); die();
C:\>php D:\wamp64\www\w.php
object(test_construct_avg)# () {
["input"]=>
int()
}
int()
object(test_construct_avg)# () {
["input"]=>
string() "new_input"
}
string() "new_input" C:\>
__destruct()析构函数的执行时刻
C:\>php D:\wamp64\www\w.php
In constructor
object(test)# () {
["test"]=>
int()
}
int()
object(PHPTree1)# () {
["MinDataLevelNum"]=>
string() "w2"
["DBPrimaryKeyFieldName"]=>
string() "w0"
["DBParentFieldName"]=>
string() "w1"
}
wwwDestroying MyDestructableClass
<?php class MyDestructableClass
{
function __construct()
{
print "In constructor\n";
$this->name = "MyDestructableClass";
} function __destruct()
{
print "Destroying " . $this->name . "\n";
}
} $obj = new MyDestructableClass(); class test
{
public $test = ''; function __construct($input = '')
{
$this->test = $input;
} function getTest()
{
return $this->test;
} function w()
{
var_dump($this);
var_dump($this->test);
}
} $w = new test(45335);
$w->w(); class PHPTree1
{
function __construct($DBPrimaryKeyFieldName, $DBParentFieldName, $MinDataLevelNum = 0)
{
$this->MinDataLevelNum = $MinDataLevelNum;
$this->DBPrimaryKeyFieldName = $DBPrimaryKeyFieldName;
$this->DBParentFieldName = $DBParentFieldName;
} function w()
{
var_dump($this);
}
} $w = new PHPTree1('w0', 'w1', 'w2');
$w->w(); echo 'www';
die();
对__construct()构造函数传入参数,提高代码的复用性。
<?php
class PHPTree1
{
function __construct($DBPrimaryKeyFieldName, $DBParentFieldName, $MinDataLevelNum = 0)
{
$this->MinDataLevelNum = $MinDataLevelNum;
$this->DBPrimaryKeyFieldName = $DBPrimaryKeyFieldName;
$this->DBParentFieldName = $DBParentFieldName;
}
function w()
{
var_dump($this);
}
}
$w = new PHPTree1('w0', 'w1', 'w2');
$w->w(); die();
构造函数与后台登录安全
w
前言
0-访问后台安全方面暂且考虑客户端浏览器cookie和客户端的访问历程;
1-后台控制器中登录控制器相对其他业务控制器单列,暂未写安全控制器;
2-cookie是成功登录后被存储到客户端单个浏览器的,不考虑cookie的篡改,即有cookie则判定为合法身份,暂未进一步读取数据库校验合法性;
假设
0-在无cookie的情况下,访问后台非登录控制器的方法的行为,直接判定为恶意访问;
1-在有cookie的情况下,访问后台非登录控制器的方法的行为,如果前路径不对,则返回至登录界面。
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Wa extends CI_Controller
{
public $wgen_cookie = '';
function __construct()
{
parent::__construct();
$this->load->helper('cookie');
$this->wgen_cookie = get_cookie('wdomain_login', NULL);
$this->wno_cookie();
}
public function index()
{
$this->load->view('w_wa');
}
public function wadd()
{
$this->wcheck_addurl();
$w5 = $this->wgen_cookie;
$this->load->model('item_test');
$wserver_name = array();
for ($w = 0, $len = $_POST['winput']; $w < $len; $w++) {
$wcheck = $this->do_upload('wimg' . $w);
if (array_key_exists('error', $wcheck)) {
$wserver_name[] = '@w@';
} elseif (array_key_exists('upload_data', $wcheck)) {
$wserver_name[] = $wcheck['upload_data']['file_name'];
}
}
$wimg_json = json_encode($wserver_name);
$wimg_string = implode(',', $wserver_name);
$arr = array('name' => $_POST['w0'], 'desc' => $_POST['w1'], 'price_in' => $_POST['w2'], 'price_out' => $_POST['w3'], 'selling' => $_POST['w4'], 'author' => $w5, 'img' => $wimg_json, 'img_string' => $wimg_string, 'img_json' => $wimg_json);
$warr = array('Msg' => 'Some errors occured.');
if ($this->item_test->u_insert($arr)) $warr = array('Msg' => 'SUCCEED');
echo json_encode($warr);
$this->load->view('w_wa');
}
function do_upload($name)
{
$config['upload_path'] = './uploads/';
$config['upload_path'] = './wsta/witem/';
$config['allowed_types'] = 'gif|jpg|png';
$config['max_size'] = 10 * 1024;
$config['max_width'] = 3 * 1024;
$config['max_height'] = 3 * 1024;
$this->load->library('upload', $config);
if (!$this->upload->do_upload($name)) {
$data = array('error' => $this->upload->display_errors());
} else {
$data = array('upload_data' => $this->upload->data());
}
return $data;
}
protected function wcheck_addurl()
{
if (!isset($_SERVER['HTTP_REFERER']) || ($_SERVER['HTTP_REFERER'] != 'http://admin.domain.cn/login/in ' && $_SERVER['HTTP_REFERER'] != 'http://admin.domain.cn/wa')) {
header('Location: http://admin.domain.cn');
die();
}
}
protected function wno_cookie()
{
//没有cookis
if (empty($this->wgen_cookie)) {
$this->wdanger();
}
}
protected function wdanger()
{
sleep(13);
header('Location: http://www.0.www');
header('Location: http://www.1.www');
die('die');
}
}
0-登录后台
admin.w.cn
1-登录成功
admin.w.cn/wa
2-tab本地切换至提交商品页
3-访问wa控制器wadd方法提交商品信息
目的实现:指引合法者不合适的访问路径、禁止非法者的非法的访问路径。



__destruct()析构函数的执行时刻 __construct()构造函数传入参数 构造函数与后台登录安全的更多相关文章
- Python之异常处理(执行python文件时传入参数)
使用sys模块 使用sys模块里的argv参数,用来保存参数值 import sys #sys.argv的作用是获取到运行python文件时,传入的参数 #默认如果运行python文件不传参数,arg ...
- Js setInterval与setTimeout(定时执行与循环执行)的代码(可以传入参数)
最近在做项目时用到了定时执行的js方法,setInterval与setTimeout时间长了不用有些生疏了,所以自己总结了一下,记下来,以便以后使用. Document自带的方法: 循环执行:var ...
- C++学习基础十——子类构造函数与析构函数的执行
1.子类构造函数的执行: 先执行父类的构造函数,再执行成员对象的构造函数,最后执行自身的构造函数. 当继承多个类时,构造函数的 执行顺序与继承时的顺序 相同,而与子类构造函数调用父类构造函数的顺序无关 ...
- C++在单继承、多继承、虚继承时,构造函数、复制构造函数、赋值操作符、析构函数的执行顺序和执行内容
一.本文目的与说明 1. 本文目的:理清在各种继承时,构造函数.复制构造函数.赋值操作符.析构函数的执行顺序和执行内容. 2. 说明:虽然复制构造函数属于构造函数的一种,有共同的地方,但是也具有一定的 ...
- C++学习笔记(6)----基类和派生类的构造函数和析构函数的执行顺序
基类和派生类:构造函数和析构函数的执行顺序 在Visual Studio中,新建控制台工程,构造类如下: #include<iostream> using namespace std; c ...
- C++11六大函数(构造函数,移动构造函数,移动赋值操作符,复制构造函数,赋值操作符,析构函数)
在C++中,有三大函数复制控制(复制构造函数,赋值操作符,析构函数),而在C++11中,加入了移动构造函数,移动赋值操作符.我就斗胆将他们命名为六大函数好了. 一.构造函数 c++primer中说过: ...
- 编写类String的构造函数、拷贝构造函数、析构函数和赋值函数
一.题目: class String { public: String(const char *str = NULL); // 普通构造函数 String(const String &othe ...
- CPP_类默认函数:构造函数,拷贝构造函数,赋值函数和析构函数
类默认函数:构造函数,拷贝构造函数,赋值函数和析构函数 // person.h #ifndef _PERSON_H_ #define _PERSON_H_ class Person{ public : ...
- C++之构造函数、参数列表、析构函数
参考自:https://blog.csdn.net/sunSHINEEzy/article/details/78122485 构造函数之默认构造函数(调用的构造函数不用传递参数) 两种实例化方式都是默 ...
随机推荐
- Java多线程简析——Synchronized(同步锁)、Lock以及线程池
Java多线程 Java中,可运行的程序都是有一个或多个进程组成.进程则是由多个线程组成的.最简单的一个进程,会包括mian线程以及GC线程. 线程的状态 线程状态由以下一张网上图片来说明: 在图中, ...
- java 远程调试 remote java application
1.在本地eclipse中,打开debug configuration,在弹出的窗口中,点击左边的remote java application. 2.在右边的窗口中,输入项目名称.远程主机的地址和端 ...
- C++的历史与现状
在31年前(1979年),一名刚获得博士学位的研究员,为了开发一个软件项目发明了一门新编程语言,该研究员名为Bjarne Stroustrup,该门语言则命名为——C with classes,四年后 ...
- 复现IIS6.0远程命令执行漏洞
出这个漏洞有一定时间了,一直没测试,因为知道这个漏洞有条件的,好吧,顺便感谢royal大佬今天晚上日内网的指点. 漏洞要求: 开启Webdav PS:不想刚拿下的内网服务器一下权限掉了,又不想放xx远 ...
- 软件配置管理中的SVN
一.简单介绍 1.什么是软件配置管理 软件配置管理是指通过运行版本号控制.变更控制的规程.以及使用合适的配置管理软件.来保证全部配置项的完整性和可跟踪性. 配置管理是对工作成果的一种有效保护. 2.为 ...
- PostgreSQL视频去重 图片去重系列1
PostgreSQL 在视频.图片去重,图像搜索业务中的应用 图片搜索 PostgreSQL的图像搜索插件使用了非常主流的Haar wavelet技术对图像进行变换后存储 gist 索引方法(支持pa ...
- CSS3实现0.5px的边框
前端页面细节处理好了才会显得精致.边框在网页中是常见的一种样式了.虽然不把它处理为0.5px看上去没毛病,但是想让你做的东西征服更多的人,这些细节处理是必须的. 今天主要说一下如何让边框显示0.5px ...
- 点击edittext并显示其内容
package com.example.sum;//sum import com.example.sum.R;//sum import android.app.Activity; import and ...
- 【BZOJ】1031: [JSOI2007]字符加密Cipher(后缀数组)
http://www.lydsy.com/JudgeOnline/problem.php?id=1031 很容易想到这就是将字符串复制到自己末尾然后后缀数组搞出sa然后按区间输出即可. 然后换了下模板 ...
- 【BZOJ】1679: [Usaco2005 Jan]Moo Volume 牛的呼声(数学)
http://www.lydsy.com/JudgeOnline/problem.php?id=1679 水题没啥好说的..自己用笔画画就懂了 将点排序,然后每一次的点到后边点的声音距离和==(n-i ...